一、条件构造器一览

构造器数据载自官网集中整理

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、时间排序

Logo

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

更多推荐