LambdaQueryWrapperX.eqIfPresent
时间: 2023-12-12 13:35:22 浏览: 241
LambdaQueryWrapperX.eqIfPresent是Mybatis-plus中的一个方法,用于根据传入的参数判断是否需要添加等于条件。如果参数不为空,则添加等于条件,否则不添加。以下是LambdaQueryWrapperX.eqIfPresent的使用示例:
```java
LambdaQueryWrapper<UserDo> wrapper = new LambdaQueryWrapper<>();
String name = "zcx";
wrapper.eqIfPresent(StringUtils.isNotEmpty(name), UserDo::getName, name);
List<UserDo> userList = userMapper.selectList(wrapper);
System.out.println("userList:" + userList.toString());
```
在上面的示例中,我们首先创建了一个LambdaQueryWrapper对象wrapper,然后定义了一个字符串name,并将其赋值为"zcx"。接着,我们使用LambdaQueryWrapperX.eqIfPresent方法,判断name是否为空,如果不为空,则添加等于条件,否则不添加。最后,我们使用wrapper作为参数调用userMapper的selectList方法,查询符合条件的用户列表,并将结果输出到控制台。
相关问题
selectPage(reqVO, new LambdaQueryWrapperX<VarianceDO>() .eqIfPresent(VarianceDO::getFiscalYear, reqVO.getFiscalYear()) .eqIfPresent(VarianceDO::getWeekEnd, reqVO.getWeekEnd()) .eqIfPresent(VarianceDO::getApprovalStatus, reqVO.getApprovalStatus()) .eq(StrUtil.isNotBlank( reqVO.getOu()),VarianceDO::getOperatingUnit, reqVO.getOu()) .eq(StrUtil.isNotBlank( reqVO.getMu()),VarianceDO::getManagementUnit, reqVO.getMu()) .eq(StrUtil.isNotBlank( reqVO.getSmu()),VarianceDO::getSubManagementUnit, reqVO.getSmu()) .eq(StrUtil.isNotBlank( reqVO.getRankCode()),VarianceDO::getRankCode, reqVO.getRankCode()) .eqIfPresent(VarianceDO::getStaffGpn, reqVO.getEmployeeGPN()) .apply( reqVO.getApprover() != null,"FIND_IN_SET ( '"+ reqVO.getApprover() +"',approver )") .orderByDesc(VarianceDO::getVarianceId)); 我想在这个里面增加一张子表(SELECT va.varianceId FROM ts_variance_fill va WHERE 1=1 and va.charge_back ='N')关联和主表关联主键是varianceId,字表如果传入charge_back 字段为空则只查询主表
你想在这个查询中增加一个子查询来关联主表和子表,并且如果传入的 charge_back 字段为空,则只查询主表。我可以帮你修改这段代码,如下所示:
```
selectPage(reqVO, new LambdaQueryWrapperX<VarianceDO>()
.inSql("varianceId", "SELECT varianceId FROM ts_variance_fill WHERE 1=1 and charge_back ='N'")
.eqIfPresent(VarianceDO::getFiscalYear, reqVO.getFiscalYear())
.eqIfPresent(VarianceDO::getWeekEnd, reqVO.getWeekEnd())
.eqIfPresent(VarianceDO::getApprovalStatus, reqVO.getApprovalStatus())
.eq(StrUtil.isNotBlank(reqVO.getOu()), VarianceDO::getOperatingUnit, reqVO.getOu())
.eq(StrUtil.isNotBlank(reqVO.getMu()), VarianceDO::getManagementUnit, reqVO.getMu())
.eq(StrUtil.isNotBlank(reqVO.getSmu()), VarianceDO::getSubManagementUnit, reqVO.getSmu())
.eq(StrUtil.isNotBlank(reqVO.getRankCode()), VarianceDO::getRankCode, reqVO.getRankCode())
.eqIfPresent(VarianceDO::getStaffGpn, reqVO.getEmployeeGPN())
.apply(reqVO.getApprover() != null, "FIND_IN_SET ( '"+ reqVO.getApprover() +"',approver )")
.orderByDesc(VarianceDO::getVarianceId));
```
在这个查询中,我们使用了 `inSql` 方法来添加一个子查询,该子查询选取了 `ts_variance_fill` 表中的 `varianceId` 字段,当 `charge_back` 字段的值为 `'N'` 时,将其与主表的 `varianceId` 字段进行关联。同时,我们在 `SELECT` 语句中使用了 `1=1` 来保证 SQL 语法的正确性。如果传入的 `charge_back` 字段为空,则只查询主表,因为在这种情况下,子查询中的 `WHERE` 条件将不成立,因此不会返回任何结果。
LambdaQueryWrapperX. group by
LambdaQueryWrapperX是阿里巴巴开源的MyBatis Plus的一个扩展工具,它提供了一种更加简洁和直观的方式来操作数据库。`group by`是SQL中的一个聚合函数,用于对查询结果按照一个或多个列进行分组,并对每个组应用聚合函数(如COUNT、SUM、AVG等)。
在LambdaQueryWrapperX中,`group by`通常与`lambda`表达式一起使用,可以让你用类似Java 8 Lambda的方式编写SQL查询,例如:
```java
List<AggregatedEntity> result = queryWrapperX
.select()
.from(Entity.class)
.groupBy(field(Entity::getId)) // 按照id字段分组
.aggSum(field(Entity::getAmount)) // 对amount字段求和
.list();
```
这里,`field(Entity::getId)`是一个Lambda表达式,表示按照`Entity`类的`id`字段进行分组。`aggSum(field(Entity::getAmount))`则表示对`amount`字段求和。
阅读全文