溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

MyBatisPlus QueryWrapper多條件查詢及修改方法是什么

發(fā)布時間:2022-09-21 17:16:52 來源:億速云 閱讀:645 作者:iii 欄目:開發(fā)技術(shù)

這篇“MyBatisPlus QueryWrapper多條件查詢及修改方法是什么”文章的知識點大部分人都不太理解,所以小編給大家總結(jié)了以下內(nèi)容,內(nèi)容詳細,步驟清晰,具有一定的借鑒價值,希望大家閱讀完這篇文章能有所收獲,下面我們一起來看看這篇“MyBatisPlus QueryWrapper多條件查詢及修改方法是什么”文章吧。

gt、ge、lt、le、isNull、isNotNull

大于 >

例: gt("age", 18) → age > 18

ge 大于等于 >=

例: ge("age", 18) → age >= 18

lt 小于 <

例: lt("age", 18) &rarr; age < 18

le 小于等于 <=

例: le("age", 18) &rarr; age <= 18

isNUll 字段 IS NULL

例: isNull("name") &rarr; name is null

isNotNull 字段 IS NOT NULL

例: isNotNull("name") &rarr; name is not null 

@Test
public void queryWrapperOne() {
    QueryWrapper<User> queryWrapper = new QueryWrapper<>();
    queryWrapper.
            isNull("name")
            .ge("age", 23)
            .isNotNull("email");
    // 邏輯刪除
    int result = userMapper.delete(queryWrapper);
    System.out.println(result);
    // 最終的語句為:UPDATE user SET deleted=1 WHERE deleted=0 AND name IS NULL AND age >= ? AND email IS NOT NULL
}

MyBatisPlus QueryWrapper多條件查詢及修改方法是什么

eq、ne

eq 等于 =

例: eq("name", "老王") &rarr; name = '老王'

ne 不等于 <>

例: ne("name", "老王") &rarr; name <> '老王' 

@Test
public void queryWrapperTwo() {
    QueryWrapper<User> queryWrapper = new QueryWrapper<>();
    queryWrapper.eq("name", "BNTang");
    // selectOne:返回的是一條記錄,當(dāng)出現(xiàn)多條時會報錯
    User user = userMapper.selectOne(queryWrapper);
    System.out.println(user);
}

MyBatisPlus QueryWrapper多條件查詢及修改方法是什么

between、notBetween

BETWEEN 值1 AND 值2

例: between("age", 18, 30) &rarr; age between 18 and 30

NOT BETWEEN 值1 AND 值2

例: notBetween("age", 18, 30) &rarr; age not between 18 and 30

MyBatisPlus QueryWrapper多條件查詢及修改方法是什么

allEq

allEq 全部 eq(或個別 isNull)

個別參數(shù)說明:

params: key 為數(shù)據(jù)庫字段名, value 為字段值

如果想表示 null isNull,則在 value 取值的時候傳入一個 null, 為 null 時調(diào)用 isNull 方法, 為false時則忽略value為null的,也就是不拼接 value 為 null 的查詢條件字段

例1: allEq({id:1,name:"老王",age:null})&rarr;id = 1 and name = '老王' and age is null

例2: allEq({id:1,name:"老王",age:null}, false)&rarr;id = 1 and name = '老王'

@Test
public void queryWrapperFour() {
    QueryWrapper<User> queryWrapper = new QueryWrapper<>();
    Map<String, Object> queryParamsMap = new HashMap<>();
    queryParamsMap.put("id", 1373266771933462530L);
    queryParamsMap.put("name", "BNTang");
    queryParamsMap.put("age", 23);
    queryWrapper.allEq(queryParamsMap);
    List<User> users = userMapper.selectList(queryWrapper);
    users.forEach(System.out::println);
}

MyBatisPlus QueryWrapper多條件查詢及修改方法是什么

個別參數(shù)說明

filter: 過濾函數(shù), 是否允許字段傳入比對條件中

params 與 null、IsNull 同上

例1: allEq((k,v) -> k.indexOf("a") >= 0, {id:1,name:"老王",age:null})&rarr;name = '老王' and age is null

例2: allEq((k,v) -> k.indexOf("a") >= 0, {id:1,name:"老王",age:null}, false)&rarr;name = '老王'

MyBatisPlus QueryWrapper多條件查詢及修改方法是什么

如上圖可看到,只添加了一個 id 查詢的條件因為我寫的過濾條件為要包含 i 這個字符串,所以只有第一個 key, value 包含了所以就只添加了 id

like、notLike、likeLeft、likeRight

LIKE '%值%'

例: like("name", "王")&rarr;name like '%王%'

NOT LIKE '%值%'

例: notLike("name", "王")&rarr;name not like '%王%'

LIKE '%值'

例: likeLeft("name", "王")&rarr;name like '%王'

LIKE '值%'

例: likeRight("name", "王")&rarr;name like '王%'

@Test
public void queryWrapperFive() {
    QueryWrapper<User> queryWrapper = new QueryWrapper<>();
    queryWrapper
            .notLike("name", "BNTang")
            .likeRight("email", "zq");
    // 返回值是Map列表
    List<Map<String, Object>> users = userMapper.selectMaps(queryWrapper);
    users.forEach(System.out::println);
}

MyBatisPlus QueryWrapper多條件查詢及修改方法是什么

in、notIn、inSql、notinSql、exists、notExists

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

例: in("age",{1,2,3})&rarr;age in (1,2,3)

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

例: notIn("age",{1,2,3})&rarr;age not in (1,2,3)

字段 IN ( sql語句 )

例: inSql("age", "1,2,3,4,5,6")&rarr;age in (1,2,3,4,5,6)

例: inSql("id", "select id from table where id < 3")&rarr;id in (select id from table where id < 3)

字段 NOT IN ( sql語句 )

例: notInSql("age", "1,2,3,4,5,6")&rarr;age not in (1,2,3,4,5,6)

例: notInSql("id", "select id from table where id < 3")&rarr;id not in (select id from table where id < 3)

拼接 EXISTS ( sql語句 )

例: exists("select id from table where age = 1")&rarr;exists (select id from table where age = 1)

拼接 NOT EXISTS ( sql語句 )

例: notExists("select id from table where age = 1")&rarr;not exists (select id from table where age = 1) 

@Test
public void queryWrapperSix() {
   QueryWrapper<User> queryWrapper = new QueryWrapper<>();
    queryWrapper.in("id", 1, 2, 3);
    queryWrapper.inSql("id", "select id from user where id < 3");
    // 返回值是Object列表
    List<Object> users = userMapper.selectObjs(queryWrapper);
    users.forEach(System.out::println);
}

MyBatisPlus QueryWrapper多條件查詢及修改方法是什么

or、and

拼接 OR

注意事項:

主動調(diào)用or表示緊接著下一個方法不是用and連接!(不調(diào)用or則默認(rèn)為使用and連接)

例: eq("id",1).or().eq("name","老王")&rarr;id = 1 or name = '老王'

OR 嵌套

例: or(i -> i.eq("name", "李白").ne("status", "活著"))&rarr;or (name = '李白' and status <> '活著')

AND 嵌套

例: and(i -> i.eq("name", "李白").ne("status", "活著"))&rarr;and (name = '李白' and status <> '活著')

@Test
public void queryWrapperSeven() {
    // 修改值
    User user = new User();
    user.setAge(99);
    user.setName("BNTang6666");
    // 修改條件
    UpdateWrapper<User> userUpdateWrapper = new UpdateWrapper<>();
    userUpdateWrapper
            .like("name", "BNTang")
            .or()
            .between("age", 20, 30);
    int result = userMapper.update(user, userUpdateWrapper);
    System.out.println(result);
}

MyBatisPlus QueryWrapper多條件查詢及修改方法是什么

MyBatisPlus QueryWrapper多條件查詢及修改方法是什么

嵌套 or、嵌套 and

@Test
public void queryWrapperEight() {
    // 修改值
    User user = new User();
    user.setAge(99);
    user.setName("BNTang6666");
    // 修改條件
    UpdateWrapper<User> userUpdateWrapper = new UpdateWrapper<>();
    userUpdateWrapper
            .like("name", "A")
            .or(i -> i.eq("name", "BNTang6666").ne("age", 20));
    int result = userMapper.update(user, userUpdateWrapper);
    System.out.println(result);
}

MyBatisPlus QueryWrapper多條件查詢及修改方法是什么

orderBy、orderByDesc、orderByAsc

排序:ORDER BY 字段, ...

例: orderBy(true, true, "id", "name")&rarr;order by id ASC,name ASC

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

例: orderByDesc("id", "name")&rarr;order by id DESC, name DESC

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

例: orderByAsc("id", "name")&rarr;order by id ASC,name ASC

@Test
public void queryWrapperNine() {
    QueryWrapper<User> queryWrapper = new QueryWrapper<>();
    queryWrapper.orderByDesc("id");
    List<User> users = userMapper.selectList(queryWrapper);
    users.forEach(System.out::println);
}

MyBatisPlus QueryWrapper多條件查詢及修改方法是什么

last

無視優(yōu)化規(guī)則直接拼接到 sql 的最后

注意事項:

只能調(diào)用一次, 多次調(diào)用以最后一次為準(zhǔn)有 sql 注入的風(fēng)險, 請謹(jǐn)慎使用

例: last("limit 1") 

@Test
public void queryWrapperTen() {
    QueryWrapper<User> queryWrapper = new QueryWrapper<>();
    queryWrapper.last("limit 1");
    List<User> users = userMapper.selectList(queryWrapper);
    users.forEach(System.out::println);
}

MyBatisPlus QueryWrapper多條件查詢及修改方法是什么

指定要查詢的列

@Test
public void queryWrapperEleven() {
    QueryWrapper<User> queryWrapper = new QueryWrapper<>();
    queryWrapper.select("id", "name", "age");
    
    List<User> users = userMapper.selectList(queryWrapper);
    users.forEach(System.out::println);
}

MyBatisPlus QueryWrapper多條件查詢及修改方法是什么

set、setSql

SQL SET 字段

例: set("name", "老李頭")

例: set("name", "")&rarr;數(shù)據(jù)庫字段值變?yōu)榭兆址?/p>

例: set("name", null)&rarr;據(jù)庫字段值變?yōu)閚ull

設(shè)置 SET 部分 SQL

例: setSql("name = '老李頭'")

@Test
public void queryWrapperTwelve() {
    // 修改值
    User user = new User();
    user.setAge(10);
    // 修改條件
    UpdateWrapper<User> userUpdateWrapper = new UpdateWrapper<>();
    userUpdateWrapper
            .like("name", "A")
            // 除了可以查詢還可以使用set設(shè)置修改的字段
            .set("name", "BNTang")
            // 可以有子查詢
            .setSql(" email = '303158131@qq.com'");
    int result = userMapper.update(user, userUpdateWrapper);
    System.out.println(result);
}

MyBatisPlus QueryWrapper多條件查詢及修改方法是什么

以上就是關(guān)于“MyBatisPlus QueryWrapper多條件查詢及修改方法是什么”這篇文章的內(nèi)容,相信大家都有了一定的了解,希望小編分享的內(nèi)容對大家有幫助,若想了解更多相關(guān)的知識內(nèi)容,請關(guān)注億速云行業(yè)資訊頻道。

向AI問一下細節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI