Mybatisplus的queryWrapper对字段做函数处理
Mybatisplus的queryWrapper提供了lambda表达式来方便地构造查询条件,但是它并不支持对字段做函数处理。不过,你可以通过使用SQL函数来对字段进行函数处理,例如在where子句中使用函数:
QueryWrapper<Entity> wrapper = new QueryWrapper<>();
wrapper.lambda().eq(Entity::getName, "张三")
.and(i -> i.apply("date_format(create_time,'%Y-%m-%d') = '2022-01-01'"));
List<Entity> entityList = entityMapper.selectList(wrapper);
其中,apply方法可以接受一个SQL表达式,你可以在其中使用SQL函数对字段进行处理。在上面的例子中,我们使用了MySQL中的date_format函数来对create_time字段进行格式化处理,然后再和固定的日期进行比较。这样就可以实现对字段的函数处理了。
Mybatisplus的queryWrapper的or对字段做函数处理
Mybatis-plus的QueryWrapper中的or方法可以使用Lambda表达式对字段进行函数处理,例如:
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.or(i -> Functions.upper(i.getStr("name")).like("%" + keyword.toUpperCase() + "%"))
.or(i -> Functions.length(i.getStr("phone")).gt(10));
在这个示例中,我们使用了Lambda表达式对name字段执行了upper函数,对phone字段执行了length函数,并将它们分别放在了两个or方法中,表示或者的关系。这样就可以在查询时对字段进行函数处理了。
mybatisplus QueryWrapper select IFNULL
MyBatisPlus 中使用 QueryWrapper
进行 Select 查询并处理 IFNULL
在 MyBatisPlus 的查询操作中,当需要执行聚合函数如求和 (SUM
) 并且希望对可能出现的 NULL 值进行默认替换时,可以利用 SQL 函数 IFNULL()
或者数据库特定的同义词(比如 MySQL 下面也可以用 COALESCE()
)。通过 QueryWrapper
对象的方法链调用来构建这样的查询逻辑。
下面是一个具体的例子展示如何使用 QueryWrapper
实现带 IFNULL
处理的 SELECT 语句:
// 创建 QueryWrapper 实例
QueryWrapper<YourEntity> queryWrapper = new QueryWrapper<>();
// 设置要选择的内容, 使用自定义 SQL 片段来应用 IFNULL 函数
queryWrapper.select("IFNULL(SUM(your_column_name), 0) AS total");
// 执行查询获取结果列表 (假设 yourMapper 是已经配置好的 Mapper 接口)
List<Map<String, Object>> resultMaps = yourMapper.selectMaps(queryWrapper);
// 输出结果中的 "total" 字段值
for (Map<String, Object> map : resultMaps) {
System.out.println(map.get("total"));
}
这段代码展示了如何创建一个 QueryWrapper
来指定所选列,并通过传递给 select()
方法的一个字符串参数包含了 IFNULL
表达式的部分[^4]。这使得即使 your_column_name
列中有 null 值,在最终的结果集中也会被转换成数值 0 而不是 null。
相关推荐















