关于MyBatis-Plus 提供Wrappers.lambdaQuery()的方法

实例:

private LambdaQueryWrapper<XXX> buildQueryWrapper(XXXBo bo) { Map<String, Object> params = bo.getParams(); LambdaQueryWrapper<XXX> lqw = Wrappers.lambdaQuery(); lqw.eq(bo.getOrgId() != null, XXX::getOrgId, bo.getOrgId()); lqw.eq(bo.getSupplierId() != null, XXX::getSupplierId, bo.getSupplierId()); lqw.like(bo.getCertigier() != null, XXX::getCertigier, bo.getCertigier()); lqw.like(StringUtils.isNotBlank(bo.getTitle()), XXX::getTitle, bo.getTitle()); lqw.like(StringUtils.isNotBlank(bo.getCode()), XXX::getCode, bo.getCode()); lqw.like(StringUtils.isNotBlank(bo.getAddress()), XXX::getAddress, bo.getAddress()); lqw.eq(bo.getPermission() != null, XXX::getPermission, bo.getPermission()); lqw.eq(bo.getEndTime() != null, XXX::getEndTime, bo.getEndTime()); lqw.like(StringUtils.isNotBlank(bo.getRegCode()), XXX::getRegCode, bo.getRegCode()); lqw.eq(StringUtils.isNotBlank(bo.getRemark()), XXX::getRemark, bo.getRemark()); lqw.eq(StringUtils.isNotBlank(bo.getAgent()), XXX::getAgent, bo.getAgent()); lqw.between(params.get("beginOrderTime") != null && params.get("endOrderTime") != null, XXX::getOrderTime ,params.get("beginOrderTime"), params.get("endOrderTime")); lqw.between(params.get("beginRegTime") != null && params.get("endRegTime") != null, XXX::getRegTime ,params.get("beginRegTime"), params.get("endRegTime")); lqw.orderByDesc(XXX::getId); return lqw; }

这个方法是用于构建一个 LambdaQueryWrapper 对象的,LambdaQueryWrapper 是 MyBatis-Plus 提供的一个用于动态构建 SQL 查询条件的类。你这个方法主要是根据传入的 XXXBo 对象中的参数,来动态生成查询条件。以下是对该方法的详细解读:

1. 获取 params 参数:

Map<String, Object> params = bo.getParams();
这里从 XXX对象中获取了一个 params 字段,通常这是用于保存一些额外的查询参数,比如开始时间和结束时间等。

2. 创建 LambdaQueryWrapper 实例:

LambdaQueryWrar<XXX> lqw = Wrappers.lambdaQuery();
Wrappers.lambdaQuery() 是 MyBatis-Plus 提供的工具方法,创建了一个 LambdaQueryWrapper 对象,该对象用于后续的查询条件链式调用。

3. 动态添加查询条件:

根据不同的字段判断是否添加查询条件:
  • eq():用于等值查询。
  • like():用于模糊查询。
  • between():用于范围查询。
  • 每一个条件都根据对应的字段是否为空(或是否满足某个条件)来动态决定是否加到查询条件中。例如 bo.getId() != null,表示只有当 Id 不为空时,才会将这个字段加入查询条件。
  • like 用于模糊查询,eq 用于精确匹配。

4. 范围查询:

lqw.between(params.get("beginOrderTime") != null && params.get("endOrderTime") != null,
    XXX::getOrderTime ,params.get("beginOrderTime"), params.get("endOrderTime"));
lqw.between(params.get("beginRegTime") != null && params.get("endRegTime") != null,
    XXX::getRegTime ,params.get("beginRegTime"), params.get("endRegTime"));
这部分是对 params 中的 beginOrderTimeendOrderTimebeginRegTimeendRegTime 进行的范围查询。between() 方法的作用是查询某个字段在给定的两个时间之间的记录。

5. 排序:

这行代码表示最终的查询结果会按照 Id 字段降序排列。

总结:

这个方法的核心功能是根据 XXX对象的不同属性,动态生成相应的查询条件,并返回一个 LambdaQueryWrapper,这使得查询可以灵活应对不同的条件组合,符合动态 SQL 查询的需求。

如果有问题或者需要优化的地方,可以进一步讨论。

可以通过 between 方法来实现这个需求,在查询中增加一个 XXX::getId 在 0 到 9900 之间的条件。

你可以在现有的 buildQueryWrapper 方法中,添加如下条件:

lqw.betn(XXX::getId, 0, 9900);
 

猜你喜欢

转载自blog.csdn.net/s_sos0/article/details/143035083