LambdaQueryWrapper
LambdaQueryWrapper
是MyBatis-Plus库中的一个功能强大的查询构造器,它允许你使用Lambda表达式来构建类型安全的SQL查询。以下是一些关于如何在Java代码中使用LambdaQueryWrapper
的基本示例:
基本用法
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; // ... LambdaQueryWrapper<Activity> lqw = Wrappers.lambdaQuery(); lqw.eq(Activity::getDelFlag, "0");
在这个例子中,我们首先导入了必要的类,然后创建了一个LambdaQueryWrapper
实例,并使用eq()
方法添加了一个等于条件。
添加多个条件
你可以链式调用多个条件方法来构建更复杂的查询:
lqw.eq(Activity::getDelFlag, "0") .gt(Activity::getStartTime, someDate) .lt(Activity::getEndTime, anotherDate);
在这个例子中,我们添加了三个条件:delFlag
等于"0",startTime
大于某个日期,以及endTime
小于另一个日期。
使用or和and逻辑
你可以使用and()
和or()
方法来组合条件:
lqw.and(wq -> wq.eq(Activity::getDelFlag, "0").or().eq(Activity::getStatus, "active"));
在这个例子中,我们创建了一个嵌套的条件,表示delFlag
等于"0"或者status
等于"active"。
分页查询
你可以使用page()
方法进行分页查询:
Page<Activity> page = new Page<>(currentPage, pageSize); IPage<Activity> result = activityMapper.selectPage(page, lqw);
在这个例子中,我们创建了一个Page
对象来指定当前页码和每页大小,然后调用selectPage()
方法执行分页查询。
排序
你可以使用orderBy()
方法对结果进行排序:
lqw.orderByAsc(Activity::getStartTime).orderByDesc(Activity::getEndTime);
在这个例子中,我们按照startTime
升序排列,然后按照endTime
降序排列。
不等于
lqw.ne(Activity::getActivityId, entity.getActivityId());
这行代码使用了LambdaQueryWrapper
的ne()
方法,用于在查询条件中添加一个不等于(NOT EQUAL
)条件。具体来说,这个条件表示查询activityId
字段值不等于entity.getActivityId()
的记录。
常用方法
以下是一些常用的 LambdaQueryWrapper
方法:
-
eq:等于
lqw.eq(Activity::getDelFlag, "0");
-
ne:不等于
lqs.ne(Activity::getActivityId, entity.getActivityId());
-
gt:大于
lqw.gt(Activity::getStartTime, someDate);
-
ge:大于等于
lqw.ge(Activity::getStartTime, someDate);
-
lt:小于
lqw.lt(Activity::getEndTime, anotherDate);
-
le:小于等于
lqw.le(Activity::getEndTime, anotherDate);
-
like:模糊查询(包含)
lqw.like(Activity::getName, "%someName%");
-
notLike:模糊查询(不包含)
lqw.notLike(Activity::getName, "%someName%");
-
in:在某个范围内
lqw.in(Activity::getActivityId, activityIds);
-
notIn:不在某个范围内
lqw.notIn(Activity::getActivityId, activityIds);
-
isNull:字段值为 null
lqw.isNull(Activity::getSomeField);
-
isNotNull:字段值不为 null
lqw.isNotNull(Activity::getSomeField);
-
groupBy:分组
lqw.groupBy(Activity::getSomeField);
-
orderByAsc:升序排序
lqw.orderByAsc(Activity::getStartTime);
-
orderByDesc:降序排序
lqw.orderByDesc(Activity::getStartTime);
-
and:逻辑与
lqw.and(wq -> wq.eq(Activity::getDelFlag, "0").or().eq(Activity::getStatus, "active"));
-
or:逻辑或
lqw.or(wq -> wq.eq(Activity::getDelFlag, "0").and().eq(Activity::getStatus, "inactive"));
-
nested:嵌套条件
lqw.nested(Iwq -> iwq.eq(Activity::getDelFlag, "0").or().eq(Activity::getStatus, "active"));
这些方法可以帮助你构建复杂的查询条件。你可以根据需要组合使用这些方法来满足不同的查询需求。
注意事项
-
确保你已经正确配置了MyBatis-Plus,并且你的实体类和数据库表之间有正确的映射关系。
-
LambdaQueryWrapper
使用Java的泛型来确保类型安全,因此在编写查询时不需要进行类型转换。 -
MyBatis-Plus的API可能会随着版本的更新而发生变化,因此建议查阅最新的官方文档以获取最准确的信息。
以上就是LambdaQueryWrapper
在Java代码中的一些基本用法。通过这些方法,你可以方便地构建复杂的SQL查询,而无需手动编写SQL语句。