前言
MyBatis-Plus是MyBatis的增强工具,在MyBatis基础上只做增强不做改变,简化CRUD操作。本文总结10个实用技巧,帮你快速掌握MP的核心用法。
技巧1:快速入门
// 依赖
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.5.5</version>
</dependency>
// 实体类
@TableName("t_user")
public class User {
@TableId(type = IdType.AUTO)
private Long id;
private String name;
private Integer age;
private String email;
}
// Mapper接口
public interface UserMapper extends BaseMapper<User> {
}
// 直接使用CRUD
userMapper.insert(user);
userMapper.selectById(1L);
userMapper.updateById(user);
userMapper.deleteById(1L);
技巧2:条件构造器QueryWrapper
QueryWrapper<User> wrapper = new QueryWrapper<>();
wrapper.eq("name", "张三")
.ge("age", 18)
.orderByDesc("create_time");
List<User> users = userMapper.selectList(wrapper);
技巧3:Lambda条件构造器
// 推荐使用LambdaWrapper,避免字段名写错
LambdaQueryWrapper<User> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(User::getName, "张三")
.ge(User::getAge, 18)
.likeRight(User::getEmail, "test");
技巧4:分页查询
// 配置分页插件
@Configuration
public class MybatisPlusConfig {
@Bean
public MybatisPlusInterceptor mybatisPlusInterceptor() {
MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
interceptor.addInnerInterceptor(new PaginationInnerInterceptor());
return interceptor;
}
}
// 分页查询
Page<User> page = new Page<>(1, 10); // 第1页,每页10条
LambdaQueryWrapper<User> wrapper = new LambdaQueryWrapper<>()
.eq(User::getStatus, 1);
Page<User> result = userMapper.selectPage(page, wrapper);
// 获取结果
List<User> records = result.getRecords();
long total = result.getTotal();
技巧5:自动填充
// 实体类字段
@TableField(fill = FieldFill.INSERT)
private LocalDateTime createTime;
@TableField(fill = FieldFill.INSERT_UPDATE)
private LocalDateTime updateTime;
// 自动填充处理器
@Component
public class MyMetaObjectHandler implements MetaObjectHandler {
@Override
public void insertFill(MetaObject metaObject) {
this.strictInsertFill(metaObject, "createTime", LocalDateTime.class, LocalDateTime.now());
this.strictInsertFill(metaObject, "updateTime", LocalDateTime.class, LocalDateTime.now());
}
@Override
public void updateFill(MetaObject metaObject) {
this.strictUpdateFill(metaObject, "updateTime", LocalDateTime.class, LocalDateTime.now());
}
}
技巧6:逻辑删除
// 配置
mybatis-plus:
global-config:
db-config:
logic-delete-field: deleted
logic-delete-value: 1
logic-not-delete-value: 0
// 实体类
@TableLogic
private Integer deleted;
技巧7:枚举类型处理
public enum UserStatus {
NORMAL(0, "正常"),
LOCKED(1, "锁定");
@EnumValue
private final int code;
private final String desc;
}
技巧8:多租户插件
@Bean
public MybatisPlusInterceptor mybatisPlusInterceptor() {
MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
interceptor.addInnerInterceptor(new TenantLineInnerInterceptor(new TenantLineHandler() {
@Override
public Expression getTenantId() {
return new LongValue(1); // 当前租户ID
}
}));
return interceptor;
}
技巧9:代码生成器
AutoGenerator generator = new AutoGenerator();
generator.setGlobalConfig(globalConfig);
generator.setDataSource(dataSourceConfig);
generator.setPackageInfo(packageConfig);
generator.setStrategy(strategyConfig);
generator.execute();
技巧10:性能分析插件
// 开发环境开启SQL性能分析
@Bean
public PerformanceInterceptor performanceInterceptor() {
PerformanceInterceptor interceptor = new PerformanceInterceptor();
interceptor.setMaxTime(1000); // SQL最大执行时间
interceptor.setFormat(true); // 格式化SQL
return interceptor;
}
总结
MyBatis-Plus大大简化了MyBatis的开发工作,掌握这10个技巧可以应对大部分日常开发场景。核心是灵活使用条件构造器和各种插件。
本文由AI辅助创作。
---
📌 **如果觉得文章对你有帮助,欢迎点赞👍收藏⭐!**
💬 有问题或建议?欢迎在评论区留言讨论~
🔗 更多技术干货请关注作者:弥烟袅绕
📚 本文地址:https://www.cnblogs.com/czlws/p/19788432
来源:https://www.cnblogs.com/czlws/p/19788432 |