跳至主要內容

条件比较

xuejmnet大约 2 分钟

条件比较

easy-query的查询、修改、删除核心过滤方法就是WherePredicateSqlPredicate两种是同一种东西,条件比较永远是column compare value,column永远在左侧

API

说明!!!

代理模式下where的第一个参数是filter过滤器,第二个参数开始才是真正的表

方法sql描述
gt>列 大于 值
ge>=列 大于等于 值
eq=列 等于 值
ne<>列 不等于 值
le<=列 小于等于 值
lt<列 小于 值
likeMatchLeftlike word%列左匹配
likeMatchRightlike %word列右匹配
likelike %word%列包含值
notLikeMatchLeftnot like word%列 不匹配左侧
notLikeMatchRightnot like %word列 不匹配右侧
notLikenot like %word%列不包含值
isNullis null列 为null
isNotNullis not null列 不为null
inin列 在集合内部,集合为空返回False
notInnot in列 不在集合内部,集合为空返回True
rangeOpenClosed< x <=区间 (left..right] = {x | left < x <= right} 一般用于范围比如时间,小的时间在前大的时间在后
rangeOpen< x <区间 (left..right) = {x | left < x < right} 一般用于范围比如时间,小的时间在前大的时间在后
rangeClosedOpen<= x <[left..right) = {x | left <= x < right} 一般用于范围比如时间,小的时间在前大的时间在后
rangeClosed<= x <=[left..right] = {x | left <= x <= right} 一般用于范围比如时间,小的时间在前大的时间在后
columnFunc自定义自定义函数包裹column
exists存在使用子查询queryable
notExists不存在使用子查询queryable

动态条件

eqgeisNullisNotNull...... 一些列方法都有对应的重载,其中第一个参数boolean condition表示是否追加对应的条件,并且where一样存在重载

SysUser sysUser =  easyQuery.queryable(SysUser.class)
                .where(o -> o.eq(SysUser::getId, "123xxx")
                        .like(false,SysUser::getPhone,"133"))//表达式like第一个参数为false所以不会添加phone的like条件到sql中
                        .firstOrNull()

==> Preparing: SELECT `id`,`create_time`,`username`,`phone`,`id_card`,`address` FROM `easy-query-test`.`t_sys_user` WHERE `id` = ? LIMIT 1
==> Parameters: 123xxx(String)
<== Time Elapsed: 3(ms)
<== Total: 0

null pointer


Map<String,String> phone=null;
SysUser sysUser = easyQuery.queryable(SysUser.class)
        .where(o -> o.eq(SysUser::getId, "123xxx")
                .like(phone!=null&&phone.containsKey("phone"),SysUser::getPhone,phone.get("phone")))
                .firstOrNull();

//虽然我们对phone进行了判断非null并且包含对应的phone的key,但是因为第二个参数是直接获取值会导致phone.get("phone")的phone还是null所以会报错空指针异常

动态条件2

Map<String,String> phone=null;
SysUser sysUser = easyQuery.queryable(SysUser.class)
                    .where(o -> o.eq(SysUser::getId, "123xxx"))
                    .where(phone!=null&&phone.containsKey("phone"),o -> o.like(SysUser::getPhone,phone.get("phone")))//where与where之间采用and链接
                    .firstOrNull();

==> Preparing: SELECT `id`,`create_time`,`username`,`phone`,`id_card`,`address` FROM `easy-query-test`.`t_sys_user` WHERE `id` = ? LIMIT 1
==> Parameters: 123xxx(String)
<== Time Elapsed: 2(ms)
<== Total: 0

上次编辑于:
贡献者: Hoysing