MP 使用小记
所谓 MP 是指:Mybatis-Plus
前言
本篇文章是对 MP 一些日常开发学习中不常见但实用的使用小技巧总结,内容将持续更新,希望能对小伙伴们有所帮助。推荐点赞 + 收藏哦!
官方文档:Mybatis-Plus
给现有分页指定字段排序
第一种方法
- 其中,
reqDTO
是方法参数。 - 主要内容是:给 page 插入排序属性。
// 1、MPPage<TestVO> page = new Page<>();page.setCurrent(reqDTO.getCurrent());page.setSize(reqDTO.getSize());List<OrderItem> itemList = new ArrayList<>();// 插入排序属性OrderItem orderItem = new OrderItem();orderItem.setColumn("create_time"); // 按什么字段排序orderItem.setAsc(false); // 是否升序itemList.add(orderItem);page.setOrders(itemList);
第二种方法
利用 MP 中 IService<T>
的 lambdaQuery()
方法。
// select * from learning_lesson where user_id = #{userId} order by latest_learn_time desc limit #{offset}, #{size}Page<LearningLesson> page = lambdaQuery().eq(LearningLesson::getUserId, userId) // where user_id = #{userId}.page(query.toMpPage("latest_learn_time", false));
条件判断
主要有以下几种:
- eq 就是 equal 等于
- ne 就是 not equal 不等于
- gt 就是 greater than 大于
- lt 就是 less than 小于
- ge 就是 greater than or equal 大于等于
- le 就是 less than or equal 小于等于
lambdaQuery 实现 list
// 第一种写法LambdaQueryWrapper<EnterpriseEntity> wrapper = new LambdaQueryWrapper<>();wrapper.eq(EnterpriseEntity::getEnterpriseId, id);List<EnterpriseEntity> list = entService.list(wrapper);// 第二种写法List<EnterpriseEntity> list = entService.lambdaQuery().eq(EnterpriseEntity::getEnterpriseId, id).list();
还可以用 select()
指定查询字段
实现 distinct 去重功能
List<EnterpriseEntity> list = this.query().select("distinct type").eq("enterprise_id", entId).between("upload_time", DateUtil.beginOfDay(today), DateUtil.endOfDay(today)).list();
自动填充
使用 @TableField
注解的 fill
属性,结合自定义的 MetaObjectHandler
,可以实现字段自动填充。
@TableField(fill = FieldFill.INSERT)
private LocalDateTime createTime;@TableField(fill = FieldFill.INSERT_UPDATE)
private LocalDateTime updateTime;
清空查询条件
MyBatis-Plus 中 QueryWrapper
类提供的方法之一:queryWrapper.clear()
。
- 用于清空当前
QueryWrapper
对象中的查询条件,让QueryWrapper
对象重新变为空白状态。
在实际的开发中,我们可能需要根据不同的条件动态构建查询条件,而 queryWrapper.clear()
提供了一种方便的方式,可以在重新构建查询条件之前清空已有的条件。
public List<User> queryUserList(String name, Integer age) {QueryWrapper<User> queryWrapper = new QueryWrapper<>();// 第一次构建查询条件if (StringUtils.isNotBlank(name)) {queryWrapper.like("name", name);}if (age != null) {queryWrapper.eq("age", age);}List<User> userList = userMapper.selectList(queryWrapper);// 清空查询条件queryWrapper.clear();// 第二次构建新的查询条件queryWrapper.eq("status", 1);List<User> userListWithStatus1 = userMapper.selectList(queryWrapper);// 返回结果,注意:此时的 queryWrapper 已经没有之前的条件了return userListWithStatus1;
}