0


MyBatis-Plus——超详细讲解条件构造器

📢📢📢📣📣📣

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

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

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

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

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


前言

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);
    }

小结

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

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


本文转载自: https://blog.csdn.net/Huang_ZX_259/article/details/122524602
版权归原作者 一心同学 所有, 如有侵权,请联系我们删除。

“MyBatis-Plus&mdash;&mdash;超详细讲解条件构造器”的评论:

还没有评论