找回密码
 立即注册
首页 业界区 安全 MyBatis-Plus实战:从入门到精通的10个技巧 ...

MyBatis-Plus实战:从入门到精通的10个技巧

吮槌圯 前天 00:00
前言

MyBatis-Plus是MyBatis的增强工具,在MyBatis基础上只做增强不做改变,简化CRUD操作。本文总结10个实用技巧,帮你快速掌握MP的核心用法。
技巧1:快速入门
  1. // 依赖
  2. <dependency>
  3.     <groupId>com.baomidou</groupId>
  4.     mybatis-plus-boot-starter</artifactId>
  5.     <version>3.5.5</version>
  6. </dependency>
  7. // 实体类
  8. @TableName("t_user")
  9. public class User {
  10.     @TableId(type = IdType.AUTO)
  11.     private Long id;
  12.     private String name;
  13.     private Integer age;
  14.     private String email;
  15. }
  16. // Mapper接口
  17. public interface UserMapper extends BaseMapper<User> {
  18. }
  19. // 直接使用CRUD
  20. userMapper.insert(user);
  21. userMapper.selectById(1L);
  22. userMapper.updateById(user);
  23. userMapper.deleteById(1L);
复制代码
技巧2:条件构造器QueryWrapper
  1. QueryWrapper<User> wrapper = new QueryWrapper<>();
  2. wrapper.eq("name", "张三")
  3.        .ge("age", 18)
  4.        .orderByDesc("create_time");
  5. List<User> users = userMapper.selectList(wrapper);
复制代码
技巧3:Lambda条件构造器
  1. // 推荐使用LambdaWrapper,避免字段名写错
  2. LambdaQueryWrapper<User> wrapper = new LambdaQueryWrapper<>();
  3. wrapper.eq(User::getName, "张三")
  4.        .ge(User::getAge, 18)
  5.        .likeRight(User::getEmail, "test");
复制代码
技巧4:分页查询
  1. // 配置分页插件
  2. @Configuration
  3. public class MybatisPlusConfig {
  4.     @Bean
  5.     public MybatisPlusInterceptor mybatisPlusInterceptor() {
  6.         MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
  7.         interceptor.addInnerInterceptor(new PaginationInnerInterceptor());
  8.         return interceptor;
  9.     }
  10. }
  11. // 分页查询
  12. Page<User> page = new Page<>(1, 10); // 第1页,每页10条
  13. LambdaQueryWrapper<User> wrapper = new LambdaQueryWrapper<>()
  14.     .eq(User::getStatus, 1);
  15. Page<User> result = userMapper.selectPage(page, wrapper);
  16. // 获取结果
  17. List<User> records = result.getRecords();
  18. long total = result.getTotal();
复制代码
技巧5:自动填充
  1. // 实体类字段
  2. @TableField(fill = FieldFill.INSERT)
  3. private LocalDateTime createTime;
  4. @TableField(fill = FieldFill.INSERT_UPDATE)
  5. private LocalDateTime updateTime;
  6. // 自动填充处理器
  7. @Component
  8. public class MyMetaObjectHandler implements MetaObjectHandler {
  9.     @Override
  10.     public void insertFill(MetaObject metaObject) {
  11.         this.strictInsertFill(metaObject, "createTime", LocalDateTime.class, LocalDateTime.now());
  12.         this.strictInsertFill(metaObject, "updateTime", LocalDateTime.class, LocalDateTime.now());
  13.     }
  14.    
  15.     @Override
  16.     public void updateFill(MetaObject metaObject) {
  17.         this.strictUpdateFill(metaObject, "updateTime", LocalDateTime.class, LocalDateTime.now());
  18.     }
  19. }
复制代码
技巧6:逻辑删除
  1. // 配置
  2. mybatis-plus:
  3.   global-config:
  4.     db-config:
  5.       logic-delete-field: deleted
  6.       logic-delete-value: 1
  7.       logic-not-delete-value: 0
  8. // 实体类
  9. @TableLogic
  10. private Integer deleted;
复制代码
技巧7:枚举类型处理
  1. public enum UserStatus {
  2.     NORMAL(0, "正常"),
  3.     LOCKED(1, "锁定");
  4.    
  5.     @EnumValue
  6.     private final int code;
  7.     private final String desc;
  8. }
复制代码
技巧8:多租户插件
  1. @Bean
  2. public MybatisPlusInterceptor mybatisPlusInterceptor() {
  3.     MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
  4.     interceptor.addInnerInterceptor(new TenantLineInnerInterceptor(new TenantLineHandler() {
  5.         @Override
  6.         public Expression getTenantId() {
  7.             return new LongValue(1); // 当前租户ID
  8.         }
  9.     }));
  10.     return interceptor;
  11. }
复制代码
技巧9:代码生成器
  1. AutoGenerator generator = new AutoGenerator();
  2. generator.setGlobalConfig(globalConfig);
  3. generator.setDataSource(dataSourceConfig);
  4. generator.setPackageInfo(packageConfig);
  5. generator.setStrategy(strategyConfig);
  6. generator.execute();
复制代码
技巧10:性能分析插件
  1. // 开发环境开启SQL性能分析
  2. @Bean
  3. public PerformanceInterceptor performanceInterceptor() {
  4.     PerformanceInterceptor interceptor = new PerformanceInterceptor();
  5.     interceptor.setMaxTime(1000); // SQL最大执行时间
  6.     interceptor.setFormat(true);  // 格式化SQL
  7.     return interceptor;
  8. }
复制代码
总结

MyBatis-Plus大大简化了MyBatis的开发工作,掌握这10个技巧可以应对大部分日常开发场景。核心是灵活使用条件构造器和各种插件。
本文由AI辅助创作。

来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

相关推荐

您需要登录后才可以回帖 登录 | 立即注册