妙用MyBatis-Plus,12个实战技巧解锁新知识
1. 避免使用 isNull 判断
NULL 值判断可能会导致索引失效,进而影响查询性能,尤其是在有大量数据的情况下。NULL,比如通过 UserStatusEnum.INACTIVE.getCode() 来代替空值判断。// 不推荐的做法
QueryWrapper<User> wrapper = new QueryWrapper<>();
wrapper.isNull("status");// 推荐的做法
QueryWrapper<User> wrapper = new QueryWrapper<>();
wrapper.eq("status", UserStatusEnum.INACTIVE.getCode());
NULL 比较的问题,数据库查询可以更高效。2. 明确 select 字段
// 不推荐的做法
List<User> users = userMapper.selectList(new QueryWrapper<>());// 推荐的做法
List<User> users = userMapper.selectList(
new QueryWrapper<User>().select("id", "name", "email")
);
3. 批量操作方法替代循环
saveBatch(),提高数据插入效率。// 不推荐的做法:逐条插入
for (User user : userList) {
userMapper.insert(user);
}// 推荐的做法:批量插入
userMapper.saveBatch(userList);
4. 使用 exists 方法代替 inSql 子查询
IN 子查询会将所有匹配的数据加载到内存中,特别是当数据量大时,会造成性能瓶颈。EXISTS 子查询,它更高效,因为数据库会直接基于索引来判断是否存在,避免了将所有数据都加载到内存的情况。// 不推荐的做法:使用 IN 子查询
QueryWrapper<User> wrapper = new QueryWrapper<>();
wrapper.inSql("id", "SELECT id FROM user WHERE status = 'active'");// 推荐的做法:使用 EXISTS 子查询
QueryWrapper<User> wrapper = new QueryWrapper<>();
wrapper.exists("SELECT 1 FROM user WHERE status = 'active' AND user.id = user.id");
EXISTS,查询会更高效,尤其在大数据量的情况下,性能提升明显。5. 使用 orderBy 代替 last
SQL 可能引发 SQL 注入风险。比如,你可能写了一个拼接排序的 SQL 语句,结果被不怀好意的人利用了。orderBy 来进行安全排序,避免手动拼接 SQL 字符串。// 不推荐的做法:直接拼接排序字段
QueryWrapper<User> wrapper = new QueryWrapper<>();
wrapper.last("ORDER BY created_at DESC");// 推荐的做法:使用 orderBy 进行排序
QueryWrapper<User> wrapper = new QueryWrapper<>();
wrapper.orderByDesc("created_at");
6. 使用 LambdaQuery 确保类型安全
LambdaQueryWrapper 来保证字段名的类型安全,编译时就能发现错误,减少运行时出错的概率。// 不推荐的做法
QueryWrapper<User> wrapper = new QueryWrapper<>();
wrapper.eq("name", "Tom");// 推荐的做法:使用 LambdaQueryWrapper
LambdaQueryWrapper<User> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(User::getName, "Tom");
7. 使用 between 代替 ge 和 le
between 来简化 SQL 语句,使条件更为简洁,提升可读性。// 不推荐的做法
QueryWrapper<User> wrapper = new QueryWrapper<>();
wrapper.ge("age", 18).le("age", 30);// 推荐的做法:使用 between
QueryWrapper<User> wrapper = new QueryWrapper<>();
wrapper.between("age", 18, 30);
between,你可以让 SQL 更简洁,逻辑也更加清晰。8. 排序字段注意索引
9. 分页参数设置
10. 条件构造处理 NULL 值
eq 方法优雅地处理空值,避免无效查询条件的出现。11. 查询性能追踪
try-with-resources 结合自定义的性能追踪工具,优雅地监控查询性能。12. 枚举类型映射
-END-
以上,就是今天的分享了,看完文章记得右下角给何老师点赞,也欢迎在评论区写下你的留言。