MyBatis Plus高效开发指南
1. MyBatis Plus核心优势
- 无侵入性:只做增强不做改变
- 强大CRUD:内置通用Mapper/Service
- Lambda表达式:类型安全的查询条件
- 自动分页:无需手动处理分页逻辑
- 代码生成:一键生成各层代码
2. 快速集成Spring Boot
依赖配置:
xml
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.5.3.1</version>
</dependency>
实体类注解:
java
@Data
@TableName("sys_user")
public class User {
@TableId(type = IdType.AUTO)
private Long id;
@TableField("user_name")
private String name;
private Integer age;
@TableField(exist = false)
private String tempField;
}
3. 核心功能实战
条件构造器使用:
java
// 查询年龄大于25且名字包含"张"的用户
List<User> users = userMapper.selectList(
new QueryWrapper<User>()
.gt("age", 25)
.like("name", "张")
.orderByDesc("create_time")
);
// Lambda方式(类型安全)
List<User> users = userMapper.selectList(
Wrappers.<User>lambdaQuery()
.gt(User::getAge, 25)
.like(User::getName, "张")
);
ActiveRecord模式:
java
User user = new User();
user.setName("test");
user.setAge(30);
user.insert(); // 直接插入
user.setAge(35);
user.updateById(); // 更新操作
4. 高级特性应用
分页插件配置:
java
@Configuration
public class MybatisPlusConfig {
@Bean
public MybatisPlusInterceptor paginationInterceptor() {
MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
interceptor.addInnerInterceptor(new PaginationInnerInterceptor());
return interceptor;
}
}
// 使用示例
Page<User> page = new Page<>(1, 10);
Page<User> result = userMapper.selectPage(page, null);
自动填充功能:
java
@TableField(fill = FieldFill.INSERT)
private LocalDateTime createTime;
@TableField(fill = FieldFill.INSERT_UPDATE)
private LocalDateTime updateTime;
// 实现MetaObjectHandler
@Component
public class MyMetaObjectHandler implements MetaObjectHandler {
@Override
public void insertFill(MetaObject metaObject) {
this.strictInsertFill(metaObject, "createTime", LocalDateTime::now, LocalDateTime.class);
}
@Override
public void updateFill(MetaObject metaObject) {
this.strictUpdateFill(metaObject, "updateTime", LocalDateTime::now, LocalDateTime.class);
}
}
5. 代码生成器实战
java
FastAutoGenerator.create(url, username, password)
.globalConfig(builder -> builder
.author("baomidou")
.outputDir("D://generator"))
.packageConfig(builder -> builder
.parent("com.example.mybatisplus")
.moduleName("system"))
.strategyConfig(builder -> builder
.addInclude("user", "role") // 包含的表
.entityBuilder()
.enableLombok()
.controllerBuilder()
.enableRestStyle())
.templateEngine(new FreemarkerTemplateEngine())
.execute();
适用场景建议:
- 常规CRUD:使用BaseMapper/IService
- 复杂查询:Wrapper条件构造器
- 多表关联:自定义XML/SQL
- 快速开发:代码生成器+ActiveRecord模式
技术选型总结:
- 传统项目/复杂SQL:选择原生MyBatis
- 快速开发/标准CRUD:选择MyBatis Plus
- 微服务架构:MyBatis Plus + Spring Cloud
- 超高并发:MyBatis Plus + ShardingSphere