MyBatis Plus高效开发指南
MyBatis Plus高效开发指南
1. MyBatis Plus核心优势
- 无侵入性:只做增强不做改变
- 强大CRUD:内置通用Mapper/Service
- Lambda表达式:类型安全的查询条件
- 自动分页:无需手动处理分页逻辑
- 代码生成:一键生成各层代码
2. 快速集成Spring Boot
依赖配置:
<dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.5.3.1</version>
</dependency>
实体类注解:
@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. 核心功能实战
条件构造器使用:
// 查询年龄大于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模式:
User user = new User();
user.setName("test");
user.setAge(30);
user.insert(); // 直接插入user.setAge(35);
user.updateById(); // 更新操作
4. 高级特性应用
分页插件配置:
@Configuration
public class MybatisPlusConfig {@Beanpublic 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);
自动填充功能:
@TableField(fill = FieldFill.INSERT)
private LocalDateTime createTime;@TableField(fill = FieldFill.INSERT_UPDATE)
private LocalDateTime updateTime;// 实现MetaObjectHandler
@Component
public class MyMetaObjectHandler implements MetaObjectHandler {@Overridepublic void insertFill(MetaObject metaObject) {this.strictInsertFill(metaObject, "createTime", LocalDateTime::now, LocalDateTime.class);}@Overridepublic void updateFill(MetaObject metaObject) {this.strictUpdateFill(metaObject, "updateTime", LocalDateTime::now, LocalDateTime.class);}
}
5. 代码生成器实战
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