(MyBatis-Plus) LambdaQueryWrapper 应用
1️⃣ 作用
LambdaQueryWrapper 是 MyBatis-Plus 提供的条件构造器
用于拼装 SQL 查询条件,避免手写 SQL
使用实体类的属性来指定字段,安全可靠
支持链式调用(Builder 风格),代码清晰可读
2️⃣ 构造流程
创建容器
首先创建一个 LambdaQueryWrapper 对象,作为条件容器
添加筛选条件
可以根据不同需求添加条件,如:
等于、不等于
大于、小于、大于等于、小于等于
模糊匹配
包含某些值
区间查询
可以根据条件动态添加,灵活控制查询逻辑
添加排序条件
支持升序和降序
可链式添加多个排序字段
排序顺序影响最终结果:先排序的字段优先
3️⃣ 常用查询方法
查询多条记录
查询符合条件的实体列表
可以选择返回实体对象、字段映射的 Map 或单列值列表
查询单条记录
查询符合条件的一条记录
可以控制多条结果时是否报错或返回第一条
也可以通过主键直接查询单条记录
分页查询
支持分页,通过指定页码和每页条数获取结果
返回分页对象,可获取总记录数、总页数、当前页记录等信息
记录统计与存在性判断
可以统计符合条件的记录总数
可以判断是否存在符合条件的记录
4️⃣ 使用技巧
链式调用,使条件构造清晰易读
使用 Lambda 表达式引用实体属性,避免写错字段名
动态添加条件,根据实际参数决定是否加条件
可将筛选、排序、分页组合使用,实现灵活查询
5️⃣ 总体流程
创建 LambdaQueryWrapper 容器
添加筛选条件
添加排序条件
选择查询方式(多条、单条、分页、统计等)
执行查询
返回结果
示例
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.core.metadata.IPage; import java.util.List;public class ProductCategoryService {// 假设这是 MyBatis-Plus 的 Serviceprivate ProductCategoryMapper productCategoryMapper;public IPage<ProductCategory> getActivePhoneCategories(int pageNum, int pageSize) {// 1️⃣ 创建 LambdaQueryWrapper 容器LambdaQueryWrapper<ProductCategory> wrapper = new LambdaQueryWrapper<>();// 2️⃣ 添加筛选条件wrapper.eq(ProductCategory::getStatus, "启用") // 状态为启用.like(ProductCategory::getName, "手机"); // 名称包含“手机”// 3️⃣ 添加排序条件wrapper.orderByAsc(ProductCategory::getSort).orderByDesc(ProductCategory::getCreateTime);// 4️⃣ 选择查询方式(分页查询)Page<ProductCategory> page = new Page<>(pageNum, pageSize);// 5️⃣ 执行查询IPage<ProductCategory> result = productCategoryMapper.selectPage(page, wrapper);// 6️⃣ 返回结果return result;}// 查询多条记录示例public List<ProductCategory> listActiveCategories() {LambdaQueryWrapper<ProductCategory> wrapper = new LambdaQueryWrapper<>();wrapper.eq(ProductCategory::getStatus, "启用").orderByAsc(ProductCategory::getSort);return productCategoryMapper.selectList(wrapper);}// 查询单条记录示例public ProductCategory getCategoryByName(String name) {LambdaQueryWrapper<ProductCategory> wrapper = new LambdaQueryWrapper<>();wrapper.eq(ProductCategory::getName, name);return productCategoryMapper.selectOne(wrapper);} }