mybatis?plus實(shí)現(xiàn)條件查詢
一、wapper介紹
用mp也可以方便的實(shí)現(xiàn)稍復(fù)雜點(diǎn)的條件查詢,當(dāng)然了很復(fù)雜的就還是要xml編寫sql了。
先看下mp的條件構(gòu)造抽象類的結(jié)構(gòu):
Wrapper: 條件構(gòu)造抽象類,最頂端父類
AbstractWrapper: 用于查詢條件封裝,生成 sql 的 where 條件
QueryWrapper: Entity 對象封裝操作類,不是用lambda語法
UpdateWrapper: Update 條件封裝,用于Entity對象更新操作
AbstractLambdaWrapper: Lambda 語法使用 Wrapper統(tǒng)一處理解析lambda獲取數(shù)據(jù)庫字段
LambdaQueryWrapper: 用于Lambda語法使用的查詢Wrapper
LambdaUpdateWrapper: Lambda 更新封裝Wrapper
不過最常用的還是QueryWrapper、UpdateWrapper等這些。
套路還是那樣,先創(chuàng)建QueryWrapper對象,然后再調(diào)用各種方法。
// 測試條件查詢 @Test void testQueryWrapper() { //創(chuàng)建對象,泛型里加上實(shí)體對象 QueryWrapper<User> wrapperUser = new QueryWrapper<>(); // 設(shè)置查詢的條件 // ge表示 >= , 這里就是查詢age字段,大于40的數(shù)據(jù) wrapperUser.ge("age", 40); // 調(diào)用查詢方法中,傳入wrapper對象 List<User> users = userMapper.selectList(wrapperUser); System.out.println(users); }
這里就會查詢表里age>=40,的數(shù)據(jù),看下執(zhí)行過程的sql語句:
二、常用的條件方法
在構(gòu)造條件的時候,除了上面的ge,還有很多其他的方法,這里簡單介紹下比較常用的,并且貼出執(zhí)行的sql。
1. gt 表示 >
... ... // gt表示 > , 這里就是查詢age字段,大于40的數(shù)據(jù) wrapperUser.gt("age", 40); ... ...
mp執(zhí)行的sql:
==> Preparing: SELECT id,name,age,email,create_time,update_time,version,deleted FROM user WHERE deleted=0 AND age > ? ==> Parameters: 40(Integer)
2. le 表示 <=
... ... // le表示 <=, 這里就是查詢age字段,小于等于40的數(shù)據(jù) wrapperUser.le("age", 40); ... ...
mp執(zhí)行的sql:
==> Preparing: SELECT id,name,age,email,create_time,update_time,version,deleted FROM user WHERE deleted=0 AND age <= ? ==> Parameters: 40(Integer)
3. lt 表示 <
... ... // lt表示 <, 這里就是查詢age字段,小于40的數(shù)據(jù) wrapperUser.lt("age", 40); ... ...
mp執(zhí)行的sql:
==> Preparing: SELECT id,name,age,email,create_time,update_time,version,deleted FROM user WHERE deleted=0 AND age < ? ==> Parameters: 40(Integer)
4. isNull 表示 查詢值為null
... ... // isNull wrapperUser.isNull("name"); ... ...
mp執(zhí)行的sql:
==> Preparing: SELECT id,name,age,email,create_time,update_time,version,deleted FROM user WHERE deleted=0 AND name IS NULL ==> Parameters: <== Total: 0
5. isNotNull 表示 查詢值為不為null
... ... // isNotNull wrapperUser.isNotNull("name"); ... ...
mp執(zhí)行的sql:
==> Preparing: SELECT id,name,age,email,create_time,update_time,version,deleted FROM user WHERE deleted=0 AND name IS NOT NULL ==> Parameters:
6. eq 表示 =
... ... // eq wrapperUser.eq("name", "大周4"); ... ...
mp執(zhí)行的sql:
==> Preparing: SELECT id,name,age,email,create_time,update_time,version,deleted FROM user WHERE deleted=0 AND name = ? ==> Parameters: 大周4(String)
7. ne 表示 !=
... ... // eq wrapperUser.ne("name", "大周4"); ... ...
mp執(zhí)行的sql:
==> Preparing: SELECT id,name,age,email,create_time,update_time,version,deleted FROM user WHERE deleted=0 AND name <> ? ==> Parameters: 大周4(String)
8. between 表示 在范圍之間,包含邊界值
... ... // between wrapperUser.between("age", 40, 50); ... ...
mp執(zhí)行的sql:
==> Preparing: SELECT id,name,age,email,create_time,update_time,version,deleted FROM user WHERE deleted=0 AND age BETWEEN ? AND ? ==> Parameters: 40(Integer), 50(Integer)
9. notBetween 表示 在范圍之外,不含邊界值
... ... // between wrapperUser.notBetween("age", 40, 50); ... ...
mp執(zhí)行的sql:
==> Preparing: SELECT id,name,age,email,create_time,update_time,version,deleted FROM user WHERE deleted=0 AND age NOT BETWEEN ? AND ? ==> Parameters: 40(Integer), 50(Integer)
10. notBetween 表示 在范圍之外,不含邊界值
... ... // between wrapperUser.notBetween("age", 40, 50); ... ...
mp執(zhí)行的sql:
==> Preparing: SELECT id,name,age,email,create_time,update_time,version,deleted FROM user WHERE deleted=0 AND age NOT BETWEEN ? AND ? ==> Parameters: 40(Integer), 50(Integer)
11. allEq 多條件查詢
如果我where后面要加多個條件,可以使用allEq。先創(chuàng)建一個hashmap,然后把多個條件put進(jìn)去,再調(diào)用allEq即可。
@Test void testQueryWrapper() { QueryWrapper<User> wrapperUser = new QueryWrapper<>(); Map<String, Object> map = new HashMap<>(); map.put("id", 5); map.put("name", "wesson5"); map.put("age", 29); wrapperUser.allEq(map); List<User> users = userMapper.selectList(wrapperUser); System.out.println(users); }
mp執(zhí)行的sql:
==> Preparing: SELECT id,name,age,email,create_time,update_time,version,deleted FROM user WHERE deleted=0 AND name = ? AND id = ? AND age = ? ==> Parameters: wesson5(String), 5(Integer), 29(Integer)
12. .鏈?zhǔn)骄幊蹋鄺l件查詢
此外,還可以使用鏈?zhǔn)骄幊蹋苯釉诤竺胬^續(xù).調(diào)用別的方法。
@Test void testQueryWrapper() { //創(chuàng)建對象,泛型里加上實(shí)體對象 QueryWrapper<User> wrapperUser = new QueryWrapper<>(); wrapperUser.eq("age", 29) .eq("name", "wesson5") .eq("id", 5); List<User> users = userMapper.selectList(wrapperUser); System.out.println(users); }
mp執(zhí)行的sql:
==> Preparing: SELECT id,name,age,email,create_time,update_time,version,deleted FROM user WHERE deleted=0 AND age = ? AND name = ? AND id = ? ==> Parameters: 29(Integer), wesson5(String), 5(Integer)
13. or、and
默認(rèn)情況下,在不調(diào)撥or()方法的情況下,是使用and()。
@Test void testQueryWrapper() { //創(chuàng)建對象,泛型里加上實(shí)體對象 QueryWrapper<User> wrapperUser = new QueryWrapper<>(); wrapperUser.eq("age", 29) .or() .eq("name", "wesson5") .or() .eq("id", 5); List<User> users = userMapper.selectList(wrapperUser); System.out.println(users); }
mp執(zhí)行的sql:
==> Preparing: SELECT id,name,age,email,create_time,update_time,version,deleted FROM user WHERE deleted=0 AND age = ? OR name = ? OR id = ? ==> Parameters: 29(Integer), wesson5(String), 5(Integer)
14. 嵌套o(hù)r、嵌套and
查詢sql經(jīng)常會有嵌套o(hù)r或者and的情況,可以這樣寫:
@Test void testQueryWrapper() { //創(chuàng)建對象,泛型里加上實(shí)體對象 QueryWrapper<User> wrapperUser = new QueryWrapper<>(); wrapperUser.eq("age", 29) .or( i -> i.eq("name", "wesson5") .or() .eq("id", 5) ); List<User> users = userMapper.selectList(wrapperUser); System.out.println(users); }
mp執(zhí)行的sql:
==> Preparing: SELECT id,name,age,email,create_time,update_time,version,deleted FROM user WHERE deleted=0 AND age = ? OR ( name = ? OR id = ? ) ==> Parameters: 29(Integer), wesson5(String), 5(Integer)
15. in、notIn
等于sql里的 in和not in。
@Test void testQueryWrapper() { //創(chuàng)建對象,泛型里加上實(shí)體對象 QueryWrapper<User> wrapperUser = new QueryWrapper<>(); wrapperUser.in("id", 1, 2, 3); List<User> users = userMapper.selectList(wrapperUser); System.out.println(users); }
mp執(zhí)行的sql:
==> Preparing: SELECT id,name,age,email,create_time,update_time,version,deleted FROM user WHERE deleted=0 AND id IN (?,?,?) ==> Parameters: 1(Integer), 2(Integer), 3(Integer)
16. inSql、notinSql
inSql、notinSql可以用來子查詢,比如 where id in (select * ... ...)
@Test void testQueryWrapper() { //創(chuàng)建對象,泛型里加上實(shí)體對象 QueryWrapper<User> wrapperUser = new QueryWrapper<>(); wrapperUser.in("id", "select id from user where id < 5"); List<User> users = userMapper.selectList(wrapperUser); System.out.println(users); }
mp執(zhí)行的sql:
==> Preparing: SELECT id,name,age,email,create_time,update_time,version,deleted FROM user WHERE deleted=0 AND id IN (?) ==> Parameters: select id from user where id < '5'(String)
17. last
last可以直接拼接sql到最后,只能調(diào)用一次,多次調(diào)用以最后一次為準(zhǔn)。
注意:有sql注入的風(fēng)險,慎用。
@Test void testQueryWrapper() { //創(chuàng)建對象,泛型里加上實(shí)體對象 QueryWrapper<User> wrapperUser = new QueryWrapper<>(); wrapperUser.last("limit 1"); List<User> users = userMapper.selectList(wrapperUser); System.out.println(users); }
mp執(zhí)行的sql:
==> Preparing: SELECT id,name,age,email,create_time,update_time,version,deleted FROM user WHERE deleted=0 limit 1 ==> Parameters:
18. 指定要查詢的列
只查詢出指定的字段,比如"id", "name", "age"。
@Test void testQueryWrapper() { //創(chuàng)建對象,泛型里加上實(shí)體對象 QueryWrapper<User> wrapperUser = new QueryWrapper<>(); wrapperUser.select("id", "name", "age"); List<User> users = userMapper.selectList(wrapperUser); System.out.println(users); }
mp執(zhí)行的sql:
==> Preparing: SELECT id,name,age FROM user WHERE deleted=0 ==> Parameters:
以上是一些在業(yè)務(wù)開發(fā)中常用的,稍復(fù)雜些的條件查詢,實(shí)際情況可能還有其他組合變化,更多關(guān)于mybatis plus條件查詢的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
elasticsearch節(jié)點(diǎn)的transport請求發(fā)送處理分析
這篇文章主要為大家介紹了elasticsearch節(jié)點(diǎn)的transport請求發(fā)送處理分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-04-04使用JAXBContext 設(shè)置xml節(jié)點(diǎn)屬性
這篇文章主要介紹了使用JAXBContext 設(shè)置xml節(jié)點(diǎn)屬性的操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-08-08詳解APP微信支付(java后臺_統(tǒng)一下單和回調(diào))
這篇文章主要介紹了APP微信支付(java后臺_統(tǒng)一下單和回調(diào)),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-05-05maven利用tomcat插件部署遠(yuǎn)程Linux服務(wù)器的步驟詳解
Maven已經(jīng)是Java的項目管理常用方式,下面這篇文章主要給大家介紹了關(guān)于maven利用tomcat插件部署遠(yuǎn)程Linux服務(wù)器的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考借鑒,下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。2017-11-11Java多線程run方法中直接調(diào)用service業(yè)務(wù)類應(yīng)注意的問題及解決
這篇文章主要介紹了Java多線程run方法中直接調(diào)用service業(yè)務(wù)類應(yīng)注意的問題及解決,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-06-06Java Spring開發(fā)環(huán)境搭建及簡單入門示例教程
這篇文章主要介紹了Java Spring開發(fā)環(huán)境搭建及簡單入門示例,結(jié)合實(shí)例形式分析了spring環(huán)境搭建、配置、使用方法及相關(guān)注意事項,需要的朋友可以參考下2017-11-11java如何使用正則表達(dá)式限制特殊字符的個數(shù)
這篇文章主要介紹了java如何使用正則表達(dá)式限制特殊字符的個數(shù),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-11-11