MP 使用小记
所谓 MP 是指:Mybatis-Plus
前言
本篇文章是对 MP 一些日常开发学习中不常见但实用的使用小技巧总结,内容将持续更新,希望能对小伙伴们有所帮助。推荐点赞 + 收藏哦!
官方文档:Mybatis-Plus
给现有分页指定字段排序
第一种方法
- 其中,
reqDTO
是方法参数。 - 主要内容是:给 page 插入排序属性。
java
// 1、MP
Page<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()
方法。
java
// 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
java
// 第一种写法
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 去重功能
java
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
,可以实现字段自动填充。
java
@TableField(fill = FieldFill.INSERT)
private LocalDateTime createTime;
@TableField(fill = FieldFill.INSERT_UPDATE)
private LocalDateTime updateTime;
清空查询条件
MyBatis-Plus 中 QueryWrapper
类提供的方法之一:queryWrapper.clear()
。
- 用于清空当前
QueryWrapper
对象中的查询条件,让QueryWrapper
对象重新变为空白状态。
在实际的开发中,我们可能需要根据不同的条件动态构建查询条件,而 queryWrapper.clear()
提供了一种方便的方式,可以在重新构建查询条件之前清空已有的条件。
java
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;
}