mybatis-plus 条件构造器整理及使用示例 / 时间查询
一、条件构造器一览载自官网集中整理条件构造器构造方法构造示例allEq全部eq例1: allEq({id:1,name:“老王”,age:null})—>id = 1 and name = ‘老王’ and age is nulleq等于 =eq(“name”, “老王”)—>name = ‘老王’ne不等于 <>ne(“n...
·
一、条件构造器一览
构造器数据载自官网集中整理
1、常用方法示例
条件构造器 | 构造方法 | 构造示例 |
---|---|---|
eq | 等于 = | eq(“name”, “老王”)—>name = ‘老王’ |
ne | 不等于 <> | ne(“name”, “老王”)—>name <> ‘老王’ |
gt | 大于 > | gt(“age”, 18)—>age > 18 |
ge | 大于等于 >= | ge(“age”, 18)—>age >= 18 |
lt | 小于 < | lt(“age”, 18)—>age < 18 |
le | 小于等于 <= | le(“age”, 18)—>age <= 18 |
between | BETWEEN 值1 AND 值2 | between(“age”, 18, 30)—>age between 18 and 30 |
like | LIKE ‘%值%’ | like(“name”, “王”)—>name like ‘%王%’ |
in | 字段 IN (value.get(0), value.get(1), …) | in(“age”,{1,2,3})—>age in (1,2,3) |
orderByAsc | 排序:ORDER BY 字段, … ASC | orderByAsc(“id”, “name”)—>order by id ASC,name ASC |
orderByDesc | 排序:ORDER BY 字段, … DESC | orderByDesc(“id”, “name”)—>order by id DESC,name DESC |
orderBy | 排序:ORDER BY 字段, … | orderBy(true, true, “id”, “name”)—>order by id ASC,name ASC |
groupBy | 分组:GROUP BY 字段 | groupBy(“id”, “name”)—>group by id,name |
or | 拼接 OR | eq(“id”,1).or().eq(“name”,“老王”)—>id = 1 or name = ‘老王’ |
and | AND 嵌套 | and(i -> i.eq(“name”, “李白”).ne(“status”, “活着”))—>and (name = ‘李白’ and status <> ‘活着’) |
2、剩余方法示例
条件构造器 | 构造方法 | 构造示例 |
---|---|---|
allEq | 全部eq | 例1: allEq({id:1,name:“老王”,age:null})—>id = 1 and name = ‘老王’ and age is null |
notBetween | NOT BETWEEN 值1 AND 值2 | notBetween(“age”, 18, 30)—>age not between 18 and 30 |
notLike | NOT LIKE ‘%值%’ | notLike(“name”, “王”)—>name not like ‘%王%’ |
likeLeft | LIKE ‘%值’ | likeLeft(“name”, “王”)—>name like ‘%王’ |
likeRight | LIKE ‘值%’ | likeRight(“name”, “王”)—>name like ‘王%’ |
isNull | 字段 IS NULL | isNull(“name”)—>name is null |
isNotNull | 字段 IS NOT NULL | isNotNull(“name”)—>name is not null |
notIn | 字段 IN (value.get(0), value.get(1), …) | notIn(“age”,{1,2,3})—>age not in (1,2,3) |
nested | 正常嵌套 不带 AND 或者 OR | nested(i -> i.eq(“name”, “李白”).ne(“status”, “活着”))—>(name = ‘李白’ and status <> ‘活着’) |
3、sql 拼接方法示例
条件构造器 | 构造方法 | 构造示例 |
---|---|---|
apply | 拼接 sql | apply(“id = 1”)—>id = 1 |
last | 无视优化规则直接拼接到 sql 的最后 | last(“limit 1”) |
exists | 拼接 EXISTS ( sql语句 ) | exists(“select id from table where age = 1”)—>exists (select id from table where age = 1) |
notExists | 拼接 NOT EXISTS ( sql语句 ) | notExists(“select id from table where age = 1”)—>not exists (select id from table where age = 1) |
inSql | 字段 IN ( sql语句 ) | inSql(“age”, “1,2,3,4,5,6”)—>age in (1,2,3,4,5,6) |
notInSql | 字段 NOT IN ( sql语句 ) | notInSql(“age”, “1,2,3,4,5,6”)—>age not in (1,2,3,4,5,6) |
having | HAVING ( sql语句 ) | having(“sum(age) > 10”)—>having sum(age) > 10 |
二、只返回部分字段示例
1、只返回 product_id 和 agent_info_id 字段
.select(ActivityCouponSpu.class, info -> info.getColumn().equals("product_id") || info.getColumn().equals("agent_info_id")
2、不返回 product_id 和 agent_info_id 字段,其余全返回
.select(ActivityCouponSpu.class, info -> !info.getColumn().equals("product_id") && !info.getColumn().equals("agent_info_id")
3、完整示例(只返回 product_id 和 agent_info_id 字段)
List<ActivityCouponSpu> activityCouponSpus = activityCouponSpuMapper.selectList(new LambdaQueryWrapper<ActivityCouponSpu>()
.select(ActivityCouponSpu.class, info -> info.getColumn().equals("product_id") || info.getColumn().equals("agent_info_id"))
.eq(ActivityCouponSpu::getCouponId, ActivityCouponVo.getId())
.in(ActivityCouponSpu::getProductId, Arrays.asList(goodsIds.split(",")))
);
三、时间处理相关写法
1、mybatis-plus 使用 Lambda 查询示例
- LambdaQueryWrapper:查询
- LambdaUpdateWrapper:修改
List<ActivityInfo> activityInfos = activityInfoMapper.selectList(new LambdaQueryWrapper<ActivityInfo>()
.orderByDesc(ActivityInfo::getStartTime)
.le(ActivityInfo::getShowTime, date)
.ge(ActivityInfo::getNoShowTime, date)
.eq(ActivityInfo::getStatus, StatusEnum.STATUS_YES)
.eq(ActivityInfo::getType, ActivityTypeEnum.IS_BACK_SPIKE)
);
2、双字段时间段查询 le / ge (startTime + endTime )
getShowTime: 活动开始展示时间
getNoShowTime: 活动结束展示时间
date: 当前时间
查询当前正在处于活动期间的数据
.ge(StringUtils.isNotBlank(starTime), ActivityCoupon::getStarTime, starTime)
.le(StringUtils.isNotBlank(endTime), ActivityCoupon::getEndTime, endTime)
db(2020-2-21) >= ?(2020-2-20) and (2020-3-20) <= ?2020-3-21
3、双字段时间段查询 between ( Time )
- between(判空, 时间字段,开始时间,结束时间)
time : 时间字段
查询 time 在startTime 和 endTime 时间区间内(startTime <= time <= endTime )
.between(StringUtils.isNotBlank(startTime) && StringUtils.isNotBlank(endTime) ,ActivityInfo::getTime,startTime,endTime)
4、时间排序

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐
所有评论(0)