前言
MyBatis-Plus是MyBatis的增强工具,在MyBatis基础上只做增强不做改变,简化CRUD操作。本文总结10个实用技巧,帮你快速掌握MP的核心用法。
技巧1:快速入门
- // 依赖
- <dependency>
- <groupId>com.baomidou</groupId>
- 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辅助创作。
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |