mp wrapper小技巧
技巧 MP Wrapper
2023-06-13 09:18:41 时间
别让你的舌头超越你的思想。——第欧根尼
对于mp
的wrapper
,直接使用nested
+or
是可以正确执行的
例如:
Db.list(Wrappers.lambdaQuery(UserInfo.class).or().eq(UserInfo::getName, "Jon"));
生成
2023-04-13 22:39:54.858 DEBUG 20668 --- [ main] o.d.s.s.p.m.m.UserInfoMapper.selectList : ==> Preparing: SELECT id,name,age,email,version,gmt_deleted FROM user_info WHERE gmt_deleted='2001-01-01 00:00:00' AND (name = ?)
2023-04-13 22:39:54.858 DEBUG 20668 --- [ main] o.d.s.s.p.m.m.UserInfoMapper.selectList : ==> Parameters: Jon(String)
这样的技巧可以让我们在循环里拼接or
时,无须考虑是否为第一个元素
例如stream-query
中的封装:
/**
* or 查询
*
* @param wrapper 条件构造器
* @param dataList 数据
* @param biConsumer 逻辑处理
* @param <W> 条件构造器
* @param <T> 实体类型
* @param <R> 数据类型
* @return 条件构造器
*/
public static <W extends AbstractWrapper<T, ?, W>, T, R> W multiOr(
W wrapper, Collection<R> dataList, BiConsumer<W, R> biConsumer) {
if (Lists.isEmpty(dataList)) {
return Database.notActive(wrapper);
}
return wrapper.nested(w -> dataList.forEach(data -> biConsumer.accept(w.or(), data)));
}
使用起来:
val dataList =
Lists.of(
new UserInfo() {
{
setName("Jon");
}
},
new UserInfo() {
{
setEmail("test2@baomidou.com");
}
},
new UserInfo() {
{
setName("Tom");
}
});
val wrapper =
WrapperHelper.multiOr(
Wrappers.lambdaQuery(UserInfo.class),
dataList,
(w, data) -> {
w.eq(Objects.nonNull(data.getEmail()), UserInfo::getEmail, data.getEmail())
.eq(StringUtils.isNotBlank(data.getName()), UserInfo::getName, data.getName());
});
// ==> Preparing: SELECT id,name,age,email,version,gmt_deleted FROM user_info WHERE
// gmt_deleted='2001-01-01 00:00:00' AND ((name = ? OR email = ? OR name = ?))
// ==> Parameters: Jon(String), test2@baomidou.com(String), Tom(String)
List<UserInfo> userInfos = Database.list(wrapper);
Assertions.assertEquals("Jon", userInfos.get(0).getName());
Assertions.assertEquals("test2@baomidou.com", userInfos.get(1).getEmail());
Assertions.assertEquals("Tom", userInfos.get(2).getName());
相关文章
- 这种显著标明怎么绘制?一个技巧解决,超简单~~
- 猿创征文|国产数据库---达梦应用技巧及使用案例
- 在前端领域摸爬滚打7年,我终于掌握了这些沉淀技巧
- 解决MySQL中重复数据的技巧(mysql重复数据)
- Linux查看Raid硬件信息的命令行技巧(Linux查看raid)
- 轻松搞定!Linux文件分割技巧大揭秘!(文件分割linux)
- 轻松搞定!Linux日常应用技巧大揭秘(linux日常应用)
- 轻松玩转Linux:文件挪动的小技巧(linux挪动文件)
- MySQL主从同步:解决方案与技巧(mysql主从同步问题)
- 10个小技巧帮你优化MySQL服务器,提升数据库性能(优化mysql服务器)
- 快速掌握Linux的端口状态查询技巧:详细教程(linux查询端口状态)
- Linux命令mv批量操作文件的方法与技巧(linuxmv批量)
- MySQL中分组排序技巧,提高数据分析效率(mysql中 分组排序)
- 解决MySQL数据导入失败的技巧分享(mysql一直导入失败)