📢📢📢📣📣📣

哈喽!大家好,我是【一心同学】,一位上进心十足的【Java领域博主】!😜😜😜

✨【一心同学】的写作风格:喜欢用【通俗易懂】的文笔去讲解每一个知识点,而不喜欢用【高大上】的官方陈述。

✨【一心同学】博客的领域是【面向后端技术】的学习,未来会持续更新更多的【后端技术】以及【学习心得】。

✨如果有对【后端技术】感兴趣的【小可爱】,欢迎关注一心同学】💞💞💞

❤️❤️❤️感谢各位大可爱小可爱!❤️❤️❤️ 


目录

前言

介绍

1、alleq

2、eq

3、ne

4、gt

5、lt

6、le

7、between

8、notBetween

9、like

10、notLike

11、likeLeft

12、likeRight

13、isNull

14、isNotNull

15、in

16、notIn

17、inSql

18、notInSql

19、groupBy

20、orderByAsc

21、orderByDesc

22、having

23、or

24、exists

25、notExists

26、last

27、构造器扩展使用

(1)带条件的查询

(2)带条件的修改

(3)带条件的删除

小结


前言

MyBatis-Plus提供了强大的条件构造器。通过条件构造器可以写一些复杂的SQL语句,从而提高我们的开发效率,【一心同学】也将其属性详细得整理出来了,内容非常多,大家可以【收藏】起来,后续开发过程中如果忘记了某个属性方法的使用,可以看看【一心同学】的这篇博客。

介绍

MyBatis-Plus 通过 EntityWrapper(简称 EW,MP 封装的一个查询条件构造器)或者 Condition(与 EW 类似) 来让用户自由的构建查询条件,简单便捷,没有额外的负担, 能够有效提高开发效率,它主要用于处理 sql 拼接,排序,实体参数查询等。

注意:使用的是数据库字段,不是 Java 属性!

1、alleq

描述:

  • 全部相等(或个别isNull)

allEq(Map<R, V> params)
allEq(Map<R, V> params, boolean null2IsNull)

参数说明:

params : key为数据库字段名,value为字段值
null2IsNull : 默认true,为true则在map的value为null时调用 isNull 方法,为false时则忽略value为null的

使用

(1)需求:查询姓名为“一心同学”,并且年龄为20岁的用户。

    @Test
    void testWrapper1() {

        QueryWrapper<Person> wrapper=new QueryWrapper<>();
        
        HashMap<String,Object> map=new HashMap<>();
        map.put("name","一心同学");
        map.put("age",20);

        wrapper.allEq(map);

        List<Person> personList = personMapper.selectList(wrapper);

        personList.forEach(System.out::println);
    }

(2)需求:查询姓名为“一心同学”,如果年龄为null,则不将年龄作为查询条件。

    @Test
    void testWrapper1() {

        QueryWrapper<Person> wrapper=new QueryWrapper<>();

        HashMap<String,Object> map=new HashMap<>();
        map.put("name","一心同学");
        map.put("age",null);//年龄为null

        //false则表示,当age为null则忽略该属性(不作该属性的查询),为true(默认),则表示查询age为null的用户
        wrapper.allEq(map,false);

        List<Person> personList = personMapper.selectList(wrapper);

        personList.forEach(System.out::println);
    }

2、eq

描述:

  • 等于 =

eq(R column, Object val)

参数说明:

colum:数据库的字段属性

val:属性值

使用

需求:查询姓名为“一心同学”的用户。

    @Test
    void testWrapper2() {

        QueryWrapper<Person> wrapper=new QueryWrapper<>();
        
         wrapper.eq("name","一心同学");

        List<Person> personList = personMapper.selectList(wrapper);

        personList.forEach(System.out::println);
    }

3、ne

描述:

  • 不等于 <>

ne(R column, Object val)

参数说明:

colum:数据库的字段属性

val:属性值

使用

需求:查询年龄不等于18的用户信息。

    @Test
    void testWrapper3() {

        QueryWrapper<Person> wrapper=new QueryWrapper<>();

        wrapper.ne("age",18);

        List<Person> personList = personMapper.selectList(wrapper);

        personList.forEach(System.out::println);
    }

4、gt

描述:

  • 大于等于 >=

ge(R column, Object val)

参数说明:

colum:数据库的字段属性

val:属性值

使用

需求:查询年龄大于等于18的用户。

    @Test
    void testWrapper4() {

        QueryWrapper<Person> wrapper=new QueryWrapper<>();

        wrapper.gt("age",18);

        List<Person> personList = personMapper.selectList(wrapper);

        personList.forEach(System.out::println);
    }

5、lt

描述:

  • 小于 <

lt(R column, Object val)

参数说明:

colum:数据库的字段属性

val:属性值

使用

需求:查询年龄小于20的用户信息。

    @Test
    void testWrapper5() {

        QueryWrapper<Person> wrapper=new QueryWrapper<>();

        wrapper.lt("age",20);

        List<Person> personList = personMapper.selectList(wrapper);

        personList.forEach(System.out::println);
    }

6、le

描述:

  • 小于等于 <=

le(R column, Object val)

参数说明:

colum:数据库的字段属性

val:属性值

使用

需求:查询年龄小于等于20的用户信息。

    @Test
    void testWrapper6() {

        QueryWrapper<Person> wrapper=new QueryWrapper<>();

        wrapper.le("age",20);

        List<Person> personList = personMapper.selectList(wrapper);

        personList.forEach(System.out::println);
    }

7、between

描述:

  • BETWEEN 值1 AND 值2

between(R column, Object val1, Object val2)

参数说明:

colum:数据库的字段属性

val1:值1(小)

val2:值2(大)

使用

需求:查询年龄为18到25之间的用户信息。

    @Test
    void testWrapper7() {

        QueryWrapper<Person> wrapper=new QueryWrapper<>();

        wrapper.between("age",18,25);

        List<Person> personList = personMapper.selectList(wrapper);

        personList.forEach(System.out::println);
    }

8、notBetween

描述:

  • NOT BETWEEN 值1 AND 值2

notBetween(R column, Object val1, Object val2)

参数说明:

colum:数据库的字段属性

val1:值1(小)

val2:值2(大)

使用

需求:查询年龄不在20-25区间的用户信息。

    @Test
    void testWrapper8() {

        QueryWrapper<Person> wrapper=new QueryWrapper<>();

        wrapper.between("age",20,25);

        List<Person> personList = personMapper.selectList(wrapper);

        personList.forEach(System.out::println);
    }

9、like

描述:

  • LIKE '%值%'

like(R column, Object val)

参数说明:

colum:数据库的字段属性

val:属性值

使用

需求:查询名字包含“心”的用户信息。

    @Test
    void testWrapper9() {

        QueryWrapper<Person> wrapper=new QueryWrapper<>();

        wrapper.like("name","心");

        List<Person> personList = personMapper.selectList(wrapper);

        personList.forEach(System.out::println);
    }

10、notLike

描述

  • NOT LIKE '%值%'

notLike(R column, Object val)

参数说明:

colum:数据库的字段属性

val:属性值

使用

需求:查询名字不包含“张”的用户信息。

    @Test
    void testWrapper10() {

        QueryWrapper<Person> wrapper=new QueryWrapper<>();

        wrapper.notLike("name","张");

        List<Person> personList = personMapper.selectList(wrapper);

        personList.forEach(System.out::println);
    }

11、likeLeft

描述:

  • LIKE '%值'

likeLeft(R column, Object val)

参数说明:

colum:数据库的字段属性

val:属性值

使用

需求:查询名字为“学”字结尾的用户信息。

    @Test
    void testWrapper11() {

        QueryWrapper<Person> wrapper=new QueryWrapper<>();

        wrapper.likeLeft("name","学");

        List<Person> personList = personMapper.selectList(wrapper);

        personList.forEach(System.out::println);
    }

12、likeRight

描述

  • LIKE '值%'

likeRight(R column, Object val)

参数说明:

colum:数据库的字段属性

val:属性值

使用

需求:查询名字为“一”字开头的用户信息。

    @Test
    void testWrapper12() {

        QueryWrapper<Person> wrapper=new QueryWrapper<>();

        wrapper.likeRight("name","一");

        List<Person> personList = personMapper.selectList(wrapper);

        personList.forEach(System.out::println);
    }

13、isNull

描述:

  • 字段 IS NULL

isNull(R column)

参数说明

colum:数据库的字段属性

使用

需求:查询email为null的用户信息。

    @Test
    void testWrapper13() {

        QueryWrapper<Person> wrapper=new QueryWrapper<>();

        wrapper.isNull("email");

        List<Person> personList = personMapper.selectList(wrapper);

        personList.forEach(System.out::println);
    }

14、isNotNull

描述:

  • 字段 IS NOT NULL

isNotNull(R column)

参数说明:

colum:数据库的字段属性

使用

需求:查询名字不为null的用户信息。

    @Test
    void testWrapper14() {

        QueryWrapper<Person> wrapper=new QueryWrapper<>();

        wrapper.isNotNull("name");

        List<Person> personList = personMapper.selectList(wrapper);

        personList.forEach(System.out::println);
    }

15、in

描述:

  • 字段 IN (value.get(0), value.get(1), ...)

in(R column, Collection<?> value)

参数说明:

colum:数据库的字段属性

value:值的集合

使用

需求:查找id为(1,3,4)的用户信息。

    @Test
    void testWrapper15() {

        QueryWrapper<Person> wrapper=new QueryWrapper<>();

        wrapper.in("id",Arrays.asList(1,3,4));

        List<Person> personList = personMapper.selectList(wrapper);

        personList.forEach(System.out::println);
    }

16、notIn

描述:

  • 字段 NOT IN (value.get(0), value.get(1), ...)
  • 字段 NOT IN (v0, v1, ...)

notIn(R column, Collection<?> value)
notIn(R column, Object... values)

参数说明:

colum:数据库的字段属性

value:值的集合

使用

需求:查询id不是(1,3,4)的用户信息。

    @Test
    void testWrapper16() {

        QueryWrapper<Person> wrapper=new QueryWrapper<>();

        wrapper.notIn("id",Arrays.asList(1,3,4));
       // wrapper.notIn("id",1,3,4); 两者效果一样的

        List<Person> personList = personMapper.selectList(wrapper);

        personList.forEach(System.out::println);
    }

17、inSql

描述:

  • 字段 IN ( sql语句 )

inSql(R column, String inValue)

参数说明:

colum:数据库的字段属性

inValue:sql语句或值

使用

需求:查询id为5以下的用户信息。

    @Test
    void testWrapper17() {

        QueryWrapper<Person> wrapper=new QueryWrapper<>();

     wrapper.inSql("id","select id from person where id < 5");
    // wrapper.inSql("id","1,2,3,4");//相当于 id in (1,2,3,4)

        List<Person> personList = personMapper.selectList(wrapper);

        personList.forEach(System.out::println);
    }

18、notInSql

描述:

  • 字段 NOT IN ( sql语句 )

notInSql(R column, String inValue)

参数说明:

colum:数据库的字段属性

inValue:sql语句或值

使用

需求:查询id为不在1-5区间的用户信息。

    @Test
    void testWrapper18() {

        QueryWrapper<Person> wrapper=new QueryWrapper<>();

        wrapper.notInSql("id","select id from person where id between 1 and 5");
       
     //   wrapper.notInSql("id","1,2,3,4");//相当于 id not in (1,2,3,4)

        List<Person> personList = personMapper.selectList(wrapper);

        personList.forEach(System.out::println);
    }

19、groupBy

描述:

  • 分组:GROUP BY 字段, ...
  • 例groupBy("id", "name")--->group by id,name

groupBy(R... columns)

参数说明:

colums:数据库的字段属性,可以多个

使用

需求:根据年龄进行分组查询。

    @Test
    void testWrapper19() {

        QueryWrapper<Person> wrapper=new QueryWrapper<>();

        wrapper.groupBy("age");

        List<Person> personList = personMapper.selectList(wrapper);

        personList.forEach(System.out::println);
    }

20、orderByAsc

描述:

  • 排序:ORDER BY 字段, ... ASC
  • 例: orderByAsc("id", "name")--->order by id ASC,name ASC

orderByAsc(R... columns)

参数说明:

colums:数据库的字段属性,可以多个

使用

需求:根据id升序查找用户信息。

    @Test
    void testWrapper20() {

        QueryWrapper<Person> wrapper=new QueryWrapper<>();

        wrapper.orderByAsc("id");

        List<Person> personList = personMapper.selectList(wrapper);

        personList.forEach(System.out::println);
    }

21、orderByDesc

描述:

  • 排序:ORDER BY 字段, ... DESC
  • 例: orderByDesc("id", "name")--->order by id DESC,name DESC

orderByAsc(R... columns)

参数说明:

colums:数据库的字段属性,可以多个

使用

需求:根据年龄进行降序查询。

    @Test
    void testWrapper21() {

        QueryWrapper<Person> wrapper=new QueryWrapper<>();

        wrapper.orderByDesc("age");

        List<Person> personList = personMapper.selectList(wrapper);

        personList.forEach(System.out::println);
    }

22、having

描述:

  • HAVING ( sql语句 )
  • 例: having("sum(age) > 10")--->having sum(age) > 10
    例: having("sum(age) > {0}", 11)--->having sum(age) > 11

 

having(String sqlHaving, Object... params)

参数说明:

sqlHaving:SQL语句

params:值,可以多个。

使用

需求:根据年龄分组后,查询年龄总数>20的组别。

    @Test
    void testWrapper23() {

        QueryWrapper<Person> wrapper=new QueryWrapper<>();

        wrapper.groupBy("age").having("sum(age)>20");


        List<Person> personList = personMapper.selectList(wrapper);

        personList.forEach(System.out::println);
    }

23、or

描述:

  • 拼接 OR
  • 例: eq("id",1).or().eq("name","老王")--->id = 1 or name = '老王'

注意:如果没有用or()进行拼接,那么拼接默认采用and

使用

需求:查询年龄为18或20的用户信息。

    @Test
    void testWrapper24() {

        QueryWrapper<Person> wrapper=new QueryWrapper<>();

        wrapper.eq("age",18L).or().eq("age",20L);

        List<Person> personList = personMapper.selectList(wrapper);

        personList.forEach(System.out::println);
    }

24、exists

描述:

  • 拼接 EXISTS ( sql语句 )
  • 例: exists("select id from table where age = 1")--->exists (select id from table where age = 1)
     

exists(String existsSql)

参数说明:

existsSql:进行判断的SQL语句

使用

需求:判断id为1的用户是否存在,存在则输出全部用户信息。

    @Test
    void testWrapper25() {

        QueryWrapper<Person> wrapper=new QueryWrapper<>();

     wrapper.exists("select id from person where id=1");

        List<Person> personList = personMapper.selectList(wrapper);

        personList.forEach(System.out::println);
    }

25、notExists

描述:

  • 拼接 NOT EXISTS ( sql语句 )

notExists(String notExistsSql)

参数说明:

notExistsSql:进行判断的SQL语句

使用

需求:判断id为2的用户是否存在,不存在则输出全部用户信息。

    @Test
    void testWrapper26() {

        QueryWrapper<Person> wrapper=new QueryWrapper<>();

        wrapper.notExists("select id from person where id=2");

        List<Person> personList = personMapper.selectList(wrapper);

        personList.forEach(System.out::println);
    }

26、last

描述:

  • 无视优化规则直接拼接到 sql 的最后
  • 例: last("limit 1")

last(String lastSql)

参数说明:

lastSql:追加的SQL语句。

注意事项:

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

使用

需求:查询名字带“一心”的用户信息,记住,只要一位。

 

    @Test
    void testWrapper31(){

        QueryWrapper<Person> wrapper=new QueryWrapper<>();
        wrapper.like("name","一心").last("LiMIT 1");

        List<Person> person=personMapper.selectList(wrapper);
        System.out.println(person);
    }

27、构造器扩展使用

(1)带条件的查询

需求描述:查询所有姓名的包含“心"且年龄大于20岁的用户信息。

    @Test
    void testWrapper27() {

        QueryWrapper<Person> wrapper=new QueryWrapper<>();

     wrapper.like("name","心")
             .gt("age",20);

        List<Person> personList = personMapper.selectList(wrapper);

        personList.forEach(System.out::println);
    }

需求:查询所有名字带”心“的用户数量

    @Test
    void testWrapper28() {

        QueryWrapper<Person> wrapper=new QueryWrapper<>();

        wrapper.like("name","心");

       int count=personMapper.selectCount(wrapper);

        System.out.println(count);
    }

(2)带条件的修改

需求信息:将年龄大于20岁的用户的名字修改为”老用户“。

    @Test
    void testWrapper29() {

        QueryWrapper<Person> wrapper=new QueryWrapper<>();

        wrapper.gt("age",20);

        Person person=new Person();
        person.setName("老员工");

        personMapper.update(person,wrapper);


    }

(3)带条件的删除

需求信息:将姓名带有“lisi”的用户信息删除

    @Test
    void testWrapper30() {

        QueryWrapper<Person> wrapper=new QueryWrapper<>();

        wrapper.like("name","lisi");

       int result=personMapper.delete(wrapper);
        System.out.println(result);
    }


小结

以上就是【一心同学】整理了一天的【条件构造器】知识点讲解,对于每一个【属性方法】,【一心同学】都有写出相对应的代码给大家参考理解,大家可以把这篇博客【收藏】起来,如果在开发时忘记了某个条件的使用,可以看看这篇博客。

如果这篇【文章】有帮助到你,希望可以给【一心同学】点个👍,创作不易,相比官方的陈述,我更喜欢用【通俗易懂】的文笔去讲解每一个知识点,如果有对【后端技术】感兴趣的小可爱,也欢迎关注❤️❤️❤️ 【一心同学】❤️❤️❤️,我将会给你带来巨大的【收获与惊喜】💕💕!

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐