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

結果展示:

以上僅為一些簡單的需求,后續學習使用復雜的用法再進行記錄整理。。。。。。。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM