当前位置: 首页 > news >正文

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

前言

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 {@Beanpublic 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 {@Overridepublic void insertFill(MetaObject metaObject) {this.strictInsertFill(metaObject, "createTime", LocalDateTime.class, LocalDateTime.now());this.strictInsertFill(metaObject, "updateTime", LocalDateTime.class, LocalDateTime.now());}@Overridepublic void updateFill(MetaObject metaObject) {this.strictUpdateFill(metaObject, "updateTime", LocalDateTime.class, LocalDateTime.now());}
}

技巧6:逻辑删除

// 配置
mybatis-plus:global-config:db-config:logic-delete-field: deletedlogic-delete-value: 1logic-not-delete-value: 0// 实体类
@TableLogic
private Integer deleted;

技巧7:枚举类型处理

public enum UserStatus {NORMAL(0, "正常"),LOCKED(1, "锁定");@EnumValueprivate final int code;private final String desc;
}

技巧8:多租户插件

@Bean
public MybatisPlusInterceptor mybatisPlusInterceptor() {MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();interceptor.addInnerInterceptor(new TenantLineInnerInterceptor(new TenantLineHandler() {@Overridepublic 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);  // 格式化SQLreturn interceptor;
}

总结

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

本文由AI辅助创作。

http://www.jsqmd.com/news/550857/

相关文章:

  • 2026成都求职平台省心选型评测报告 - 优质品牌商家
  • 直播字幕困境终结者:本地AI驱动的实时语音转文本解决方案
  • 无锡地埋管漏水检测联系电话 快速定位漏点 无锡芮生建设工程有限公司 - 十大品牌榜单
  • 2026高分子瓦选型指南适配多场景采购需求:成都高分子矿物质瓦/成都高分子筒瓦/四川仿古瓦/四川高分子仿古瓦/四川高分子复合矿物质瓦/选择指南 - 优质品牌商家
  • 告别冗余高斯!MeshGS实战:用自适应网格对齐技术,在Blender里实现高质量3D渲染
  • 效率革命:借力快马AI生成智能安装脚本,一键部署复杂工程环境
  • 风光储柴直流微电网可并离网切换 含: 1.永磁直驱风机+mppt+整流+并网逆变 mppt采用...
  • 告别WechatRealFriends:WeFriends帮你实现微信好友关系管理无缝过渡
  • 天津口碑好的集装箱生产源头厂家推荐,深度评测揭晓优质之选,优秀的集装箱生产源头厂家行业优质推荐亮相 - 品牌推荐师
  • ios开发: 显示网络图片
  • 3步突破AI工具限制:开源解决方案全解析
  • 3个AI工具如何提升动态图像质量?专业级画质增强全攻略
  • C++输入处理技巧:从getchar到stringstream的进阶之路
  • Packet_Device:嵌入式轻量级事件驱动分组通信协议库
  • 铜钟音乐:告别广告与社交干扰的纯净听歌工具
  • springboot-vue基于web的网上书店的图书销售商城
  • 突破限制:老旧Mac焕新体验——OpenCore Legacy Patcher全功能使用指南
  • 从压缩软件到网络协议:哈夫曼编码在真实项目里是怎么省空间的?
  • springboot-vue+nodejs的罕见病药物研发管理 慢性病药品管理系统
  • VMware macOS虚拟机解锁完全指南:从技术原理到实战优化
  • Vue3-DateTime-Picker:如何构建现代化的Vue 3日期时间选择器解决方案?
  • XILINX XDMA IP核实战避坑指南:基于VU9P平台的PCIe DMA配置与调试
  • 跨域集中管理:从单机到多服务器的Hyper-V虚拟机运维指南
  • AI工具使用限制解决方案:突破设备识别与权限重置完全指南
  • 斯坦福AI提示词库:科研基金申请高效撰写指南
  • 哔哩下载姬Downkyi终极指南:3分钟掌握B站视频下载全技能
  • 【Agent学习】Day03
  • 突破设备限制:Xiaomusic重构智能家居音乐体验
  • 在Ubuntu 22.04上,用Docker搞定PaddleOCR-VL多版本CUDA部署(含FlashAttention避坑)
  • 别再被中文路径坑了!用OpenCV的imdecode/imencode搞定图片读写(附完整代码)