MyBatis-Plus的完整使用示例,完整使用示例手册

以下是MyBatis-Plus的完整使用示例手册,涵盖从环境搭建到核心功能的实现,结合多个实际场景代码示例:


一、环境准备与依赖引入

  1. 开发环境

    • Spring Boot 项目(需配置JDK 1.8+、Maven)
    • MySQL数据库(建议字符集utf8mb4,支持表情存储)
  2. Maven依赖

    pom.xml中添加:

    xml 复制代码
    <dependency>
        <groupId>com.baomidou</groupId>
        <artifactId>mybatis-plus-boot-starter</artifactId>
        <version>3.5.2</version> <!-- 最新版本以官网为准 -->
    </dependency>
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>8.0.27</version>
    </dependency>

二、配置文件(application.yml)

yaml 复制代码
spring:
  datasource:
    url: jdbc:mysql://localhost:3306/test?useSSL=false&serverTimezone=UTC
    username: root
    password: root
    driver-class-name: com.mysql.cj.jdbc.Driver

mybatis-plus:
  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl # 开启SQL日志
  global-config:
    db-config:
      id-type: auto # 主键自增策略
      logic-delete-field: isDelete # 全局逻辑删除字段
      logic-delete-value: 1 # 逻辑删除值
      logic-not-delete-value: 0 # 未删除值

三、实体类与Mapper接口

  1. 实体类示例(User)

    java 复制代码
    @Data // Lombok注解,自动生成getter/setter
    @TableName("user") // 指定表名
    public class User {
        @TableId(type = IdType.AUTO) // 自增主键
        private Long id;
        private String name;
        private Integer age;
        private String email;
        @TableLogic // 逻辑删除字段(可选,需配合全局配置)
        private Integer isDelete;
    }
  2. Mapper接口

    java 复制代码
    @Mapper // 或使用@Repository注解
    public interface UserMapper extends BaseMapper<User> {
        // 无需额外方法,继承BaseMapper即可获得CRUD能力
    }

四、核心功能实现

1. 基础CRUD操作
java 复制代码
@Service
public class UserService {
    @Autowired
    private UserMapper userMapper;

    // 插入
    public void insertUser() {
        User user = new User();
        user.setName("Alice");
        user.setAge(25);
        userMapper.insert(user); // 返回影响行数
    }

    // 查询(按ID)
    public User getUserById(Long id) {
        return userMapper.selectById(id);
    }

    // 更新
    public void updateUser(User user) {
        user.setAge(30);
        userMapper.updateById(user); // 根据ID更新
    }

    // 删除
    public void deleteUser(Long id) {
        userMapper.deleteById(id);
    }
}
2. 条件查询与LambdaWrapper
java 复制代码
// 查询年龄 > 20 且名字包含 "Tom" 的用户
QueryWrapper<User> wrapper = new QueryWrapper<>();
wrapper.gt("age", 20).like("name", "Tom");
List<User> list = userMapper.selectList(wrapper);

// Lambda写法(避免硬编码字段名)
LambdaQueryWrapper<User> lambdaWrapper = new LambdaQueryWrapper<>();
lambdaWrapper.gt(User::getAge, 20).like(User::getName, "Tom");
List<User> list2 = userMapper.selectList(lambdaWrapper);
3. 分页查询
java 复制代码
// 配置分页插件
@Bean
public MybatisPlusInterceptor mybatisPlusInterceptor() {
    MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
    interceptor.addInnerInterceptor(new PaginationInnerInterceptor());
    return interceptor;
}

// 使用分页
Page<User> page = new Page<>(1, 10); // 当前页=1,每页大小=10
Page<User> result = userMapper.selectPage(page, null);
List<User> users = result.getRecords(); // 获取分页数据
long total = result.getTotal(); // 总记录数
4. 逻辑删除
  • 全局配置 :在application.yml中设置logic-delete-field和值。
  • 实体类字段 :添加@TableLogic注解(3.3.0+版本可省略)。
  • 效果 :执行deleteById时会自动将isDelete设为1,而非物理删除。

五、高级特性

1. 代码生成器
java 复制代码
// 使用代码生成器生成Entity、Mapper、Service、Controller
@SpringBootApplication
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}

通过mybatis-plus:codegenerator配置或工具类一键生成。

2. 乐观锁与版本控制

在实体类中添加@Version字段:

java 复制代码
@Version // 乐观锁字段
private Integer version;

更新时会自动检查版本一致性,避免并发冲突。

3. 自动填充公共字段
java 复制代码
// 实现MetaObjectHandler接口
@Component
public class MyMetaObjectHandler implements MetaObjectHandler {
    @Override
    public void insertFill(MetaObject metaObject) {
        // 自动填充创建时间
        this.setFieldValByName("createTime", LocalDateTime.now(), metaObject);
    }

    @Override
    public void updateFill(MetaObject metaObject) {
        // 自动填充更新时间
        this.setFieldValByName("updateTime", LocalDateTime.now(), metaObject);
    }
}

六、完整示例流程

  1. 启动类

    java 复制代码
    @SpringBootApplication
    @MapperScan("com.example.mapper") // 扫描Mapper接口
    public class Application {
        public static void main(String[] args) {
            SpringApplication.run(Application.class, args);
        }
    }
  2. Controller层

    java 复制代码
    @RestController
    @RequestMapping("/user")
    public class UserController {
        @Autowired
        private UserService userService;
    
        // 新增用户
        @PostMapping
        public String addUser(@RequestBody User user) {
            userService.insertUser();
            return "Success";
        }
    
        // 分页查询
        @GetMapping
        public List<User> getUsers(@RequestParam int pageNum, @RequestParam int pageSize) {
            return userService.getUsers(pageNum, pageSize);
        }
    }

七、注意事项

  1. 版本兼容性:不同版本的MyBatis-Plus可能存在API差异,需参考官方文档。
  2. SQL日志 :通过log-impl配置查看执行SQL,方便调试。
  3. 动态数据源 :如需多数据源,引入dynamic-datasource-spring-boot-starter并配置。

以上内容覆盖了MyBatis-Plus的核心功能和使用场景,更多细节可参考官方文档及示例仓库。

相关推荐
艺杯羹9 小时前
MyBatis之核心对象与工作流程及SqlSession操作
java·mybatis
天天摸鱼的java工程师15 小时前
MyBatis Plus 的实用技巧:从业务场景到代码实现
java·后端·mybatis
wuxuanok15 小时前
Web后端开发-Mybatis
java·开发语言·笔记·学习·mybatis
netyeaxi1 天前
Java:使用spring-boot + mybatis如何打印SQL日志?
java·spring·mybatis
小七mod1 天前
【MyBatis】MyBatis与Spring和Spring Boot整合原理
spring boot·spring·mybatis
椰椰椰耶1 天前
【MyBatis】XML实现,配置方法和增、删、改、查
xml·oracle·mybatis
GJCTYU2 天前
spring中@Transactional注解和事务的实战理解附代码
数据库·spring boot·后端·spring·oracle·mybatis
DuelCode2 天前
Windows VMWare Centos Docker部署Springboot 应用实现文件上传返回文件http链接
java·spring boot·mysql·nginx·docker·centos·mybatis
荔枝吻2 天前
【沉浸式解决问题】idea开发中mapper类中突然找不到对应实体类
java·intellij-idea·mybatis