Wrappers.lambdaQuery()
是 MyBatis-Plus 提供的一个便捷工具方法,用于创建 LambdaQueryWrapper
对象,该对象支持链式调用,能够以 Lambda 表达式的形式构建查询条件,从而提高代码的可读性和可维护性。它特别适用于构建动态查询条件,使得查询逻辑更加清晰和简洁。
用途
-
构建动态查询条件:可以根据业务需求动态地添加查询条件,例如等值查询、模糊查询、范围查询等。
-
提高代码可读性:使用 Lambda 表达式可以避免字段名的字符串硬编码,减少错误,同时增强代码的可读性。
使用方法
-
创建 LambdaQueryWrapper 对象:通过
Wrappers.lambdaQuery()
方法创建一个LambdaQueryWrapper
实例。 -
链式调用查询条件方法:调用
eq()
、like()
、between()
等方法来添加查询条件。 -
执行查询:将构建好的
LambdaQueryWrapper
对象传递给 MyBatis-Plus 提供的查询方法,如selectList()
、list()
等。
示例代码
以下是一个使用 Wrappers.lambdaQuery()
构建动态查询条件的示例:
// 创建 LambdaQueryWrapper 对象并添加查询条件
LambdaQueryWrapper<HesAppIfno> wrapper = Wrappers.<HesAppIfno>lambdaQuery()
.eq(HesAppIfno::getStatus, EntityStatusEnum.OK.getCode())
.eq(HesAppIfno::getCode, dto.getCode())
.like(HesAppIfno::getName, dto.getName());
// 执行查询
List<HesAppIfno> result = appIfnoMapper.selectList(wrapper);
在这个例子中,eq()
方法用于添加等值查询条件,而 like()
方法用于添加模糊查询条件。这些条件会根据传入的参数动态决定是否添加到查询中。
动态查询条件的应用
-
条件判断:可以在添加查询条件之前进行条件判断,例如检查字段是否为空,以决定是否将其加入查询条件中。
-
灵活组合查询条件:可以通过链式调用来组合多个查询条件,实现复杂的查询逻辑。
注意事项
-
处理 NULL 值:在使用
Wrappers.lambdaQuery()
时,需要注意处理 NULL 值的情况,以避免 MyBatis 报错。可以通过条件判断来确保只有非空值才会被添加到查询条件中。 -
字段选择:如果只需要查询特定字段,可以使用
select()
方法来指定需要查询的字段,从而提高查询效率。
示例代码:查询特定字段
// 查询特定字段
List<String> itemIds = this.listObjs(Wrappers.lambdaQuery(ItemInfo.class)
.select(ItemInfo::getId)
.eq(ItemInfo::getItemCode, item.getItemCode())
.eq(ItemInfo::getItemBarcode, item.getItemBarcode()),
Object::toString);
在这个例子中,select()
方法指定了需要查询的字段,而 eq()
方法用于添加等值查询条件。
总结
Wrappers.lambdaQuery()
是一个强大的工具,能够帮助开发者构建灵活且可读性强的查询条件。通过合理使用 eq()
、like()
、between()
等方法,可以轻松实现动态查询逻辑,同时提高代码的质量和可维护性
// 创建 LambdaQueryWrapper 对象并添加查询条件
LambdaQueryWrapper<Student> wrapper = Wrappers.lambdaQuery(Student.class)
.in(Student::getClassId, batches)
.orderByDesc(Student::getCreateTime);
// 执行查询
List<Student> students = studentMapper.selectList(wrapper);
在这个例子中,in()
方法用于添加范围查询条件,而 orderByDesc()
方法用于按指定字段降序排序
// 查询特定字段
List<String> itemIds = this.listObjs(Wrappers.lambdaQuery(ItemInfo.class)
.select(ItemInfo::getId)
.eq(ItemInfo::getItemCode, item.getItemCode())
.eq(ItemInfo::getItemBarcode, item.getItemBarcode()),
Object::toString);
在这个例子中,select()
方法指定了需要查询的字段,而 eq()
方法用于添加等值查询条件
// 创建 LambdaQueryWrapper 对象并添加查询条件
LambdaQueryWrapper<HesAppIfno> wrapper = Wrappers.<HesAppIfno>lambdaQuery()
.eq(HesAppIfno::getStatus, EntityStatusEnum.OK.getCode())
.eq(HesAppIfno::getCode, dto.getCode())
.like(HesAppIfno::getName, dto.getName());
// 执行查询
List<HesAppIfno> result = appIfnoMapper.selectList(wrapper);
在这个例子中,eq()
方法用于添加等值查询条件,而 like()
方法用于添加模糊查询条件