MP使用小记
# MP 使用小记
所谓 MP 是指:Mybatis-Plus
# 给现有分页指定字段排序
# 第一种方法
- 其中,
reqDTO
是方法参数。 - 主要内容是:给 page 插入排序属性。
// 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);
1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13
# 第二种方法
利用 MP 中 orderByDesc()
方法。
// select * from learning_lesson where user_id = #{userId} order by latest_learn_time desc limit #{offset}, #{size}
Page<LearningLesson> page1 = this.lambdaQuery()
.eq(LearningLesson::getUserId, userId) // where user_id = #{userId}
.orderByDesc(LearningLesson::getLatestLearnTime)
.page(new Page<>(pageNumber, pageSize));
1
2
3
4
5
6
2
3
4
5
6
# 条件判断
主要有以下几种:
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();
1
2
3
4
5
6
7
2
3
4
5
6
7
还可以用 select()
指定查询字段
# 实现 distinct 去重功能
List<EnterpriseEntity> list = this.query()
.select("distinct type")
.eq("enterprise_id", entId)
.between("upload_time", DateUtil.beginOfDay(today), DateUtil.endOfDay(today))
.list();
1
2
3
4
5
2
3
4
5
# 自动填充
使用 @TableField
注解的 fill
属性,结合自定义的 MetaObjectHandler
,可以实现字段自动填充。
@TableField(fill = FieldFill.INSERT)
private LocalDateTime createTime;
@TableField(fill = FieldFill.INSERT_UPDATE)
private LocalDateTime updateTime;
1
2
3
4
5
2
3
4
5
# 清空查询条件
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;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# Wrappers 用法
EnterpriseDO enterpriseDO = EnterpriseMapper.selectOne(
Wrappers.<EnterpriseDO>lambdaQuery()
.select(EnterpriseDO::getId)
.and(wrapper -> wrapper
.eq(EnterpriseDO::getRegisterCode, dto.getRegisterCode())
.or()
.eq(EnterpriseDO::getEntName, dto.getEntName()))
.ne(EnterpriseDO::getId, dto.getId())
);
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
上次更新: 2024/10/22 17:52:31