实例:
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
中的 beginOrderTime
和 endOrderTime
、beginRegTime
和 endRegTime
进行的范围查询。between()
方法的作用是查询某个字段在给定的两个时间之间的记录。
5. 排序:
这行代码表示最终的查询结果会按照 Id
字段降序排列。
总结:
这个方法的核心功能是根据 XXX对象的不同属性,动态生成相应的查询条件,并返回一个 LambdaQueryWrapper
,这使得查询可以灵活应对不同的条件组合,符合动态 SQL 查询的需求。
如果有问题或者需要优化的地方,可以进一步讨论。
可以通过 between
方法来实现这个需求,在查询中增加一个 XXX::getId
在 0 到 9900 之间的条件。
你可以在现有的 buildQueryWrapper
方法中,添加如下条件:
lqw.betn(XXX::getId, 0, 9900);