SpringBoot整合MybatisPlus有关条件构造器的相关查询方法

详情或有不足请参考官方文档:https://mp.baomidou.com

最近在学习mybatisPlus时总结了一些常用的有关条件构造器的查询方法,以此做下记录,方便学习使用!

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: 值 1 AND 值 2

例子:between("age", 18, 30)--->age between 18 and 30

notBetween: Not BETWEEN 值 1 AND 值 2

例子:notBetween("age", 18, 30)--->age not between 18 and 30

like: like‘%值%‘

例子:like("name", "王")--->name like ‘%王%‘

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

in: 字段IN(value.get(0),value.get(1),...)

例子:in("age",{1,2,3})--->age in (1,2,3)

字段 IN (v0, v1, ...)

例子:in("age", 1, 2, 3)--->age in (1,2,3)

notIn: 字段 IN (value.get(0), value.get(1), ...)

例子:notIn("age",{1,2,3})--->age not in (1,2,3)

字段 NOT IN (v0, v1, ...)

例子:notIn("age", 1, 2, 3)--->age not in (1,2,3)

inSql: 字段 IN(SQL语句)

例子1:inSql("age", "1,2,3,4,5,6")--->age in (1,2,3,4,5,6)

例子2:inSql("id", "select id from table where id < 3")--->id in (select id from  table where id < 3)

notInSql: 字段NOT IN (sql语句)

例子1:notInSql("age", "1,2,3,4,5,6")--->age not in (1,2,3,4,5,6)

例子2:notInSql("id", "select id from table where id < 3")--->age not in (select id from table where id < 3)

分组:GROUP BY 字段,...

例子:groupBy("id", "name")--->group by id,name

升序: ORDER BY 字段,...ASC

例子:orderByAsc("id", "name")--->order by id ASC,name ASC

降序:ORDER BY 字段,...DESC

例子:orderByDesc("id", "name")--->order by id DESC,name DESC

排序:OREDR BY 字段,...

例子:orderBy(true, true, "id", "name")--->order by id ASC,name ASC

聚合函数作为条件HAVING (sql语句)

例子1:having("sum(age) > 10")--->having sum(age) > 10(有sql注入风险)

例子2:having("sum(age) > {0}", 11)--->having sum(age) > 11(推荐使用)

拼接 OR: or()

例子:eq("id",1).or().eq("name","老王")--->id = 1 or name = ‘老王‘

注意事项:主动调用or表示紧接着下一个方法不是用and连接!(不调用or则默认为使用and连接)

OR 嵌套

例子:or(i -> i.eq("name", "李白").ne("status", "活着"))--->or (name = ‘李白‘ and status <> ‘活着‘)

AND 嵌套

例子:and(i -> i.eq("name", "李白").ne("status", "活着"))--->and (name = ‘李白‘ and status <> ‘活着‘)

nested:正常嵌套 不带AND 或者 OR

例子:nested(i -> i.eq("name", "李白").ne("status", "活着"))--->(name = ‘李白‘ and status <> ‘活着‘)

拼接 sql:apply

例子1:apply("id = 1")--->id = 1

例子2:apply("date_format(dateColumn,‘%Y-%m-%d‘) = ‘2008-08-08‘")

--->date_format(dateColumn,‘%Y-%m-%d‘) = ‘2008-08-08‘")

例子3:apply("date_format(dateColumn,‘%Y-%m-%d‘) = {0}", "2008-08-08")

--->date_format(dateColumn,‘%Y-%m-%d‘) = ‘2008-08-08‘")

注意事项:该方法可用于数据库函数 动态入参的params对应前面applySql内部的{index}部分.这样是不会有sql注入风险的,反之会有!

无视优化规则直接拼接到 sql 的最后:last

例子:last("limit 1")

注意事项:只能调用一次,多次调用以最后一次为准 有sql注入的风险,请谨慎使用

exists:拼接EXISTS(sql语句)

例子:exists("select id from table where age = 1")--->exists (select id from table where age = 1)

在学习过程中通过几个小例子(需求)验证了一下:

1.名字中包含雨并且年龄小于40   name like ‘%雨%‘ and age<40

 @Test
    public void selectByWrapper(){
        QueryWrapper<User> queryWrapper = new QueryWrapper<User>();
        //QueryWrapper<User> query = Wrappers.<User>query();
        queryWrapper.like("name","雨").lt("age",40);
        List<User> userList = userMapper.selectList(queryWrapper);
        userList.forEach(System.out::println);
    }

结果展示:

2.名字中包含雨年并且龄大于等于20且小于等于40并且email不为空   name like ‘%雨%‘ and age between 20 and 40 and email is not null

@Test
    public void selectByWrapper6(){
        QueryWrapper<User> queryWrapper = new QueryWrapper<>();
        queryWrapper.likeRight("name","王").or(qw->qw.lt("age",40).gt("age",20).isNotNull("email"));
        List<User> userList = userMapper.selectList(queryWrapper);
        for (User user : userList) {
            System.out.println(user);
        }
    }

结果展示:

3.名字为王姓或者年龄大于等于25,按照年龄降序排列,年龄相同按照id升序排列     name like ‘王%‘ or age>=25 order by age desc,id asc

  @Test
    public void selectByWrapper3(){
        QueryWrapper<User> queryWrapper = new QueryWrapper<User>();
        queryWrapper.likeRight("name","王").or().ge("age",25).orderByDesc("age").orderByAsc("id");
        List<User> userList = userMapper.selectList(queryWrapper);
        userList.forEach(System.out::println);
    }

结果展示:

4.创建日期为2019年2月14日并且直属上级为名字为王姓    date_format(create_time,‘%Y-%m-%d‘)=‘2019-02-14‘ and manager_id in (select id from user where name like ‘王%‘)

 @Test
    public void selectByWrapper4(){
        QueryWrapper<User> queryWrapper = new QueryWrapper<>();
        queryWrapper.apply("date_format(create_time,‘%Y-%m-%d‘)={0}","2019-02-14")
                .inSql("manager_id","select id from mp_user where name like ‘王%‘");
        List<User> userList = userMapper.selectList(queryWrapper);
        userList.forEach(System.out::println);
    }

结果展示:

5.名字为王姓并且(年龄小于40或邮箱不为空)     name like ‘王%‘ and (age<40 or email is not null)

 @Test
    public void selectByWrapper5(){
        QueryWrapper<User> queryWrapper = new QueryWrapper<>();
        queryWrapper.likeRight("name","王").and(wq->wq.lt("age",40).or().isNotNull("email"));
        List<User> userList = userMapper.selectList(queryWrapper);
        userList.forEach(System.out::println);
    }

结果展示:

6.名字为王姓或者(年龄小于40并且年龄大于20并且邮箱不为空)     name like ‘王%‘ or (age<40 and age>20 and email is not null)

 @Test
    public void selectByWrapper6(){
        QueryWrapper<User> queryWrapper = new QueryWrapper<>();
        queryWrapper.likeRight("name","王").or(qw->qw.lt("age",40).gt("age",20).isNotNull("email"));
        List<User> userList = userMapper.selectList(queryWrapper);
        for (User user : userList) {
            System.out.println(user);
        }
    }

结果展示:

7.(年龄小于40或邮箱不为空)并且名字为王姓            (age<40 or email is not null) and name like ‘王%‘

@Test
    public void selectByWrapper7(){
        QueryWrapper<User> queryWrapper = new QueryWrapper<>();
        queryWrapper.nested(wq->wq.lt("age",40).or().isNotNull("email")).likeRight("name","王");
        List<User> userList = userMapper.selectList(queryWrapper);
        for (User user : userList) {
            System.out.println(user);
        }
    }

结果展示:

8.年龄为30、31、34、35            age in (30、31、34、35)

 @Test
    public void selectByWrapper8(){
        QueryWrapper<User> queryWrapper = new QueryWrapper<>();
        queryWrapper.in("age",Arrays.asList(30,31,34,35));
        //queryWrapper.in("age",30,31,34,35);
        List<User> userList = userMapper.selectList(queryWrapper);
        for (User user : userList) {
            System.out.println(user);
        }
    }

结果展示:

9、只返回满足条件的其中一条语句即可       limit 1

@Test
    public void selectByWrapper9(){
        QueryWrapper<User> queryWrapper = new QueryWrapper<>();
        queryWrapper.in("age",Arrays.asList(30,31,34,35)).last("limit 1");
        List<User> userList = userMapper.selectList(queryWrapper);
        for (User user : userList) {
            System.out.println(user);
        }
    }

结果展示:

以上仅为一些简单的需求,后续学习使用复杂的用法再进行记录整理。。。。。。。

原文地址:https://www.cnblogs.com/zhukf/p/12144072.html

时间: 2024-10-08 23:16:36

SpringBoot整合MybatisPlus有关条件构造器的相关查询方法的相关文章

SpringBoot 整合 MyBatis-Plus 入门体验

一.前言 本文小编将基于 SpringBoot 整合 MyBatis-Plus , MyBatis-Plus 是一个 MyBatis 的增强工具,在 MyBatis 的基础上做增强并且不改变原本功能 ~ 二.SpringBoot整合MyBatis-Plus 基本环境 spring-boot 2.1.8 mybatis-plus 2.2.0 mysql 5.7.24 maven项目 1.pom.xml中引入MyBatis-Plus相关依赖 下面直接贴出小编的整个文件内容以作参考,避免因为部分细节缺

SpringBoot整合MybatisPlus

1. 开发前准备 1.1 前置知识 java基础 SpringBoot简单基础知识 1.2 环境参数 开发工具:IDEA 基础环境:Maven+JDK8 所用技术:SpringBoot.lombok.MybatisPlus SpringBoot版本:2.1.4 1.3 涉及知识点 MybatisPlus简介.特性.架构 MybatisPlus快速入门 MybatisPlus的基本CRUD MybatisPlus的高级查询:like查询.条件查询.分页查询等 2. MybatisPlus入门 2.

SpringBoot整合MyBatis-plus

步骤 第一步:添加必要的依赖 如果想学习Java工程化.高性能及分布式.深入浅出.微服务.Spring,MyBatis,Netty源码分析的朋友可以加我的Java高级交流:854630135,群里有阿里大牛直播讲解技术,以及Java大型互联网技术的视频免费分享给大家. 第一种是在已存在MyBatis的情况下,直接添加mybatis-plus包即可. <dependency><groupId>com.baomidou</groupId><artifactId>

springboot整合mybatis-plus逆向工程

MyBatis-Plus(简称 MP)是一个?MyBatis?的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发.提高效率而生.官方文档 代码生成器 AutoGenerator 是 MyBatis-Plus 的代码生成器,通过 AutoGenerator 可以快速生成 Entity.Mapper.Mapper XML.Service.Controller 等各个模块的代码,极大的提升了开发效率. mybatis-plus是根据数据库表来生成对应的实体类,首先我们创建数据库表Us

SpringBoot整合MybatisPlus,并实现新增、修改、删除、查看、分页

在pom.xml中引入mybatis plus的jar包 <!-- mybatis plus依赖包 --> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>3.3.0</version> </dependency> 在resources/a

ThinkPHP整合Smarty模板引擎的使用以及查询方法汇总

其实说到整合smarty我们根本就没有作什么,要做的主要还是对于模板分配各种变量的使用,这才是重点,其次还有一些配置信息要自己去填写;先说一下配置,同样的,在主目录的common下面的config文件,把配置信息写入里面就可以了,其中主要有下面一下的配置信息. 'TMPL_ENGINE_TYPE'      =>  'Smarty', //'TMPL_L_DELIM'          =>  '<{',            // 模板引擎普通标签开始标记 //'TMPL_R_DELI

页面查询某一个时间段的数据的方法或者查询多个条件的数据库的查询方法

1.只查询在某一个时间段的数据 $param = $this->request->post(); $b=array(); if(!empty($param['start_time']) && !empty($param['end_time'])){ $b['create_time']=array('between',strtotime($param['start_time']).','.strtotime($param['end_time']));} $StyleTypeMod

如何查找一个命令由哪个rpm安装&amp;&amp;rpm 的相关查询方法

[[email protected]nginx src]# which python3 /usr/bin/python3 [[email protected]-can-nginx src]# rpm -qf /usr/bin/python3 python34-3.4.8-1.el6.x86_64 [[email protected]-can-nginx src]# rpm -ql python34-3.4.8-1.el6.x86_64 /usr/bin/pydoc3 /usr/bin/pydoc

SpringBoot整合RabbitMQ之发送接收消息实战

实战前言 前几篇文章中,我们介绍了SpringBoot整合RabbitMQ的配置以及实战了Spring的事件驱动模型,这两篇文章对于我们后续实战RabbitMQ其他知识要点将起到奠基的作用的.特别是Spring的事件驱动模型,当我们全篇实战完毕RabbitMQ并大概了解一下RabbitMQ相关组件的源码时,会发现其中的ApplicationEvent.ApplicationListener.ApplicationEventPublisher跟RabbitMQ的Message.Listener.R