前言
目前正在出一个Mybatis Plus系列教程, 篇幅会较多, 喜欢的话,给个关注❤️ ~
之前给大家讲过Mybatis教程,而MyBatis-Plus 是一个 MyBatis 的增强工具,在MyBatis的基础上只做增强不做改变,为简化开发、提高效率而生。大家需要注意的是它只是一个工具,大家需要掌握和重点学习的依然是Mybatis,在熟练掌握基础的情况下使用MyBatis-Plus会达到事半功倍的效果。
好了, 废话不多说直接开整吧~
Mybatis Plus给我们提供了非常多的条件构造方法,下面一起来看下
allEq
allEq(Map<R, V> params)
allEq(Map<R, V> params, boolean null2IsNull)
allEq(boolean condition, Map<R, V> params, boolean null2IsNull)
全部eq(或个别isNull),个别参数说明:
params:key为数据库字段名,value为字段值null2IsNull: 为true则在map的value为null时调用isNull方法,为false时则忽略value为null的
Map<String, Object> params = new HashMap<>();
params.put("name", "小明");
params.put("age", null);
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.allEq(params, false);
userMapper.selectList(queryWrapper);
eq
这个很简单,之前给大家介绍过
- 等于 =
eq(R column, Object val)
eq(boolean condition, R column, Object val)
queryWrapper.eq("name", "小明");
ne
与eq相反
- 不等于
ne(R column, Object val)
ne(boolean condition, R column, Object val)
queryWrapper.ne("name", "小明");
gt
gt(R column, Object val)
gt(boolean condition, R column, Object val)
- 大于 >
queryWrapper.gt("age", "20");
ge
ge(R column, Object val)
ge(boolean condition, R column, Object val)
- 大于等于 >=
queryWrapper.ge("age", "20");
lt
lt(R column, Object val)
lt(boolean condition, R column, Object val)
- 小于 <
queryWrapper.lt("age", "20");
le
le(R column, Object val)
le(boolean condition, R column, Object val)
- 小于等于 <=
queryWrapper.le("age", "20");
between
between(R column, Object val1, Object val2)
between(boolean condition, R column, Object val1, Object val2)
- 区间查询
queryWrapper.between("age", "20", "30");
notBetween
notBetween(R column, Object val1, Object val2)
notBetween(boolean condition, R column, Object val1, Object val2)
- 不在区间
queryWrapper.notBetween("age", "20", "30");
like
like(R column, Object val)
like(boolean condition, R column, Object val)
- LIKE '%值%'
queryWrapper.like("name","%小明%");
notLike
notLike(R column, Object val)
notLike(boolean condition, R column, Object val)
- NOT LIKE '%值%'
queryWrapper.notLike("name","%小明%");
likeLeft
likeLeft(R column, Object val)
likeLeft(boolean condition, R column, Object val)
- LIKE '%值'
queryWrapper.likeLeft("name","小明");
ikeRight
ikeRight(R column, Object val)
ikeRight(boolean condition, R column, Object val)
- ILIKE '%值%'
queryWrapper.ikeRight("name","小明");
notLikeLeft
notLikeLeft(R column, Object val)
notLikeLeft(boolean condition, R column, Object val)
- NOT LIKE '%值'
queryWrapper.notLikeLeft("name","小明");
notLikeRight
notLikeRight(R column, Object val)
notLikeRight(boolean condition, R column, Object val)
- NOT LIKE '值%'
queryWrapper.notLikeRight("name","小明");
isNull
isNull(R column)
isNull(boolean condition, R column)
- 为空
queryWrapper.isNull("age");
isNotNull
isNotNull(R column)
isNotNull(boolean condition, R column)
- 不为空
queryWrapper.isNotNull("age");
in
in(R column, Collection<?> coll)
in(boolean condition, R column, Collection<?> coll)
- 在集合中
queryWrapper.in("age", Arrays.asList(1,2,3));
notIn
notIn(R column, Collection<?> coll)
- 不在集合中
queryWrapper.notIn("age", Arrays.asList(1,2,3));
inSql
inSql(R column, String inValue)
inSql(boolean condition, R column, String inValue)
- 字段 IN ( sql语句 )
queryWrapper.inSql("age", "select age from user where age > 20");
notInSql
notInSql(R column, String inValue)
notInSql(boolean condition, R column, String inValue)
- 字段 NOT IN ( sql语句 )
queryWrapper.notInSql("age", "select age from user where age > 20");
groupBy
groupBy(R... columns)
groupBy(boolean condition, R... columns)
- 分组:GROUP BY 字段, ...
queryWrapper.groupBy("name", "age");
orderByAsc
orderByAsc(R... columns)
orderByAsc(boolean condition, R... columns)
- 排序:ORDER BY 字段, ... ASC
queryWrapper.orderByAsc("name", "age");
orderByDesc
orderByDesc(R... columns)
orderByDesc(boolean condition, R... columns)
- 排序:ORDER BY 字段,... DESC
queryWrapper.orderByDesc("name", "age");
orderBy
orderBy(boolean condition, boolean isAsc, R... columns)
排序:ORDER BY 字段, ...
queryWrapper.orderBy(true, true, "name", "age");
having
having(String sqlHaving, Object... params)
having(boolean condition, String sqlHaving, Object... params)
- HAVING ( sql语句 )
queryWrapper.having("age > 20");
func
func(Consumer<Children> consumer)
func(boolean condition, Consumer<Children> consumer)
- func 方法(主要方便在出现if...else下调用不同方法能不断链)
LambdaQueryWrapper<User> queryWrapper = Wrappers.lambdaQuery();
queryWrapper.func(i -> if(true) {i.eq("id", 1)} else {i.ne("id", 1)});
or
or()
or(boolean condition)
- 拼接 OR
queryWrapper.eq("name", "小明").or().eq("name", "小红");
// 嵌套
queryWrapper.or(i -> i.eq("name", "李白").ne("status", "活着"))
and
and(Consumer<Param> consumer)
and(boolean condition, Consumer<Param> consumer)
- AND 嵌套
queryWrapper.eq("name", "小明").and(i -> i.eq("name", "小红"));
// 嵌套
queryWrapper.and(i -> i.eq("name", "李白").ne("status", "活着"))
apply
apply(String applySql, Object... params)
apply(boolean condition, String applySql, Object... params)
- 拼接 sql
注意事项:
该方法可用于数据库函数 动态入参的params对应前面applySql内部的{index}部分.这样是不会有sql注入风险的
queryWrapper.apply("id = 1")
last
last(String lastSql)
last(boolean condition, String lastSql)
- 无视优化规则直接拼接到 sql 的最后
queryWrapper.last("limit 1")
exists
exists(String existsSql)
exists(boolean condition, String existsSql)
- 拼接 EXISTS ( sql语句 )
queryWrapper.exists("select id from table where age = 1")
notExists
notExists(String notExistsSql)
notExists(boolean condition, String notExistsSql)
- 拼接 NOT EXISTS ( sql语句 )
queryWrapper.notExists("select id from table where age = 1")
结束语
下节给大家讲解主键策略~
本着把自己知道的都告诉大家,如果本文对有所帮助,点赞+关注鼓励一下呗~
MybatisPlus教程相关文章
往期Nginx教程相关文章
往期Docker教程相关文章
往前Shell脚本编程相关文章
- 一起来学Shell脚本编程(一)
- 一起来学Shell脚本编程(二)
- 一起来学Shell脚本编程(三)
- 一起来学Shell脚本编程(四)
- 一起来学Shell脚本编程(五)
- 一起来学Shell脚本编程(六)
- 一起来学Shell脚本编程(七)
往期Linux相关文章
- 一起来学Linux命令(一)
- 一起来学Linux命令(二)
- 一起来学Linux命令(三)
- 一起来学Linux命令(四)
- 一起来学Linux命令(五)
- 一起来学Linux命令(六)
- 一起来学Linux命令(七)
- 一起来学Linux命令(八)
- 一起来学Linux命令(九)
- 一起来学Linux命令(十)
往期面试题相关文章
- 查漏补缺第一期(Redis相关)
- 查漏补缺第二期(synchronized & 锁升级)
- 查漏补缺第三期(分布式事务相关)
- 查漏补缺第四期(Mysql相关)
- 查漏补缺第五期(HashMap & ConcurrentHashMap)
- 查漏补缺第六期(京东一面)
- 查漏补缺第七期(美团到店一面)
- 查漏补缺第八期(阿里一面)
- 查漏补缺第九期(阿里二面)
- 查漏补缺第十期(网易实习一面)
- 查漏补缺第十一期(网易实习二面)
- 查漏补缺第十二期(网易实习三面)
- 查漏补缺第十三期(滴滴实习一面)
- 查漏补缺第十四期(滴滴实习二面)
- 查漏补缺第十五期(华为一面)
- 查漏补缺第十六期(华为二面)
- 查漏补缺第十七期(华为三面)
- 查漏补缺第十八期(你了解class文件吗)
项目源码(源码已更新 欢迎star⭐️)
往期设计模式相关文章
- 一起来学设计模式之认识设计模式
- 一起来学设计模式之单例模式
- 一起来学设计模式之工厂模式
- 一起来学设计模式之建造者模式
- 一起来学设计模式之原型模式
- 一起来学设计模式之适配器模式
- 一起来学设计模式之桥接模式
- 一起来学设计模式之组合模式
- 一起来学设计模式之装饰器模式
- 一起来学设计模式之外观模式
- 一起来学设计模式之享元模式
- 一起来学设计模式之代理模式
- 一起来学设计模式之责任链模式
- 一起来学设计模式之命令模式
- 一起来学设计模式之解释器模式
- 一起来学设计模式之迭代器模式
- 一起来学设计模式之中介者模式
- 一起来学设计模式之备忘录模式
- 一起来学设计模式之观察者模式
- 一起来学设计模式之状态模式
- 一起来学设计模式之策略模式
- 一起来学设计模式之模板方法模式
- 一起来学设计模式之访问者模式
- 一起来学设计模式之依赖注入模式
设计模式项目源码(源码已更新 欢迎star⭐️)
Kafka 专题学习
- 一起来学kafka之Kafka集群搭建
- 一起来学kafka之整合SpringBoot基本使用
- 一起来学kafka之整合SpringBoot深入使用(一)
- 一起来学kafka之整合SpringBoot深入使用(二)
- 一起来学kafka之整合SpringBoot深入使用(三)
项目源码(源码已更新 欢迎star⭐️)
ElasticSearch 专题学习
项目源码(源码已更新 欢迎star⭐️)
往期并发编程内容推荐
- Java多线程专题之线程与进程概述
- Java多线程专题之线程类和接口入门
- Java多线程专题之进阶学习Thread(含源码分析)
- Java多线程专题之Callable、Future与FutureTask(含源码分析)
- 面试官: 有了解过线程组和线程优先级吗
- 面试官: 说一下线程的生命周期过程
- 面试官: 说一下线程间的通信
- 面试官: 说一下Java的共享内存模型
- 面试官: 有了解过指令重排吗,什么是happens-before
- 面试官: 有了解过volatile关键字吗 说说看
- 面试官: 有了解过Synchronized吗 说说看
- Java多线程专题之Lock锁的使用
- 面试官: 有了解过ReentrantLock的底层实现吗?说说看
- 面试官: 有了解过CAS和原子操作吗?说说看
- Java多线程专题之线程池的基本使用
- 面试官: 有了解过线程池的工作原理吗?说说看
- 面试官: 线程池是如何做到线程复用的?有了解过吗,说说看
- 面试官: 阻塞队列有了解过吗?说说看
- 面试官: 阻塞队列的底层实现有了解过吗? 说说看
- 面试官: 同步容器和并发容器有用过吗? 说说看
- 面试官: CopyOnWrite容器有了解过吗? 说说看
- 面试官: Semaphore在项目中有使用过吗?说说看(源码剖析)
- 面试官: Exchanger在项目中有使用过吗?说说看(源码剖析)
- 面试官: CountDownLatch有了解过吗?说说看(源码剖析)
- 面试官: CyclicBarrier有了解过吗?说说看(源码剖析)
- 面试官: Phaser有了解过吗?说说看
- 面试官: Fork/Join 有了解过吗?说说看(含源码分析)
- 面试官: Stream并行流有了解过吗?说说看