MybatisPlus中QueryWrapper使用

今日份雞湯:我掙的每一筆錢叔锐,都是自己的保障挪鹏,就算步伐很小,也步步前進(jìn)愉烙,千萬不要看不起這一分一厘讨盒,來路清白的自食其力!就是普通人最好的狀態(tài)~

最近在使用MybatisPlus查詢的時(shí)候步责,遇到一些使用不規(guī)范的返顺,導(dǎo)致查詢出錯(cuò)禀苦,今天整體整理一下。

QueryWrapper函數(shù)方法:

image.png

示例代碼:

private QueryWrapper<PushChannelPlanModel> buildPageQuery(PushChannelPlanQuery pushChannelPlanQuery) {
        QueryWrapper<PushChannelPlanModel> query = new QueryWrapper<>();
        if (StringUtils.isNotBlank(pushChannelPlanQuery.getPlanName())) {
            query.like("plan_name", pushChannelPlanQuery.getPlanName());
        }
        if (pushChannelPlanQuery.getEnableStatus() != null) {
            query.eq("enable_status", pushChannelPlanQuery.getEnableStatus());
        }
        if (pushChannelPlanQuery.getStartTime() != null) {
            query.ge("start_time", pushChannelPlanQuery.getStartTime());
        }
        if (pushChannelPlanQuery.getEndTime() != null) {
            query.le("end_time", pushChannelPlanQuery.getEndTime());
        }
        if (StringUtils.isNotBlank(pushChannelPlanQuery.getSelectType())) {
            query.and(s -> s.likeRight("select_type", pushChannelPlanQuery.getSelectType() + ",")
                    .or().like("select_type", "," + pushChannelPlanQuery.getSelectType() + ",")
                    .or().like("select_type", pushChannelPlanQuery.getSelectType())
                    .or().likeLeft("select_type", "," + pushChannelPlanQuery.getSelectType()));
        }
        query.eq("deleted", 0);
        query.orderByDesc("id");
        return query;
    }

對于上面的like其實(shí)想用的是sql中contans這個(gè)遂鹊,所以可以優(yōu)化成下面這樣:

query.apply(StringUtils.isNotBlank(pushChannelPlanQuery.getSelectType()),"FIND_IN_SET ("+pushChannelPlanQuery.getSelectType()+",select_type)");

(1)eq振乏、ne 使用說明:

eq表示相等,ne表示不等于秉扑,這里值得注意的是:多個(gè)eq連用慧邮,兩兩之間默認(rèn)為有一個(gè)and進(jìn)行連接。舉一個(gè)簡單的例子舟陆,對比一下:

QueryWrapper<UserEntity> userWrapper = new QueryWrapper<>();
userWrapper.eq("username", "test").eq("username", "test");
#select * from student WHERE username = ?  and  username = ? 

(2)and與or 使用說明:
這個(gè)使用的時(shí)候一定要注意误澳,我在寫這個(gè)的時(shí)候剛開始也是寫錯(cuò)了,就是注意你的業(yè)務(wù)邏輯要怎樣連接 括號放在哪里秦躯。and的優(yōu)先級比or要高脓匿,它會(huì)把本應(yīng)該為 或者 的兩個(gè)選項(xiàng)搶過來一個(gè),因此我們需要使用上面的這種寫法宦赠,相當(dāng)于給 or 加了個(gè)小括號陪毡,把他們當(dāng)作了一個(gè) wrapper 整體。 可以看我上面的例子勾扭,也可以看下面這個(gè)簡單的例子:

QueryWrapper<UserEntity> userWrapper = new QueryWrapper<>();
        userWrapper.and(wrapper->wrapper.eq("username", "test2").or().eq("username", "mytest"))
                .and(wrapper -> wrapper.like("username", "mytest").or().like("username", "mytest"));
#SELECT id,username,pwd,date_u,time_u,u_num,img FROM student WHERE ( username = ? OR username = ? ) AND ( username LIKE ? OR username LIKE ? )

(3)ge毡琉、gt 使用說明:
ge表示大于等于,gt表示大于妙色,注意一下邏輯關(guān)系即可(注意別寫反了)桅滋,我這個(gè)當(dāng)時(shí)就寫反了。把上面示例中start_time使用le和end_time使用ge的寫反了身辨。

(4)le丐谋、lt 使用說明:
le表示小于等于,lt表示小于煌珊,注意一下邏輯關(guān)系即可(注意別寫反了)号俐。

(5)between 使用說明:
between表示查詢范圍值,舉個(gè)例子:

查詢年齡20-30范圍 1.代表字段  2.代表開始值  3.代表結(jié)束值
queryWrapper.between("age",20,30);

注意使用between時(shí)也要注意加括號保證or的結(jié)合定庵。

usersQueryWrapper.between("uptime", begin, end);
           usersQueryWrapper.and(wrapper -> wrapper.eq("status", UsersResult.STATUS_EXIST)
                   .or()
                   .eq("status", UsersResult.BAN)); 

(6) clear 使用說明:
可以清除之前 QueryWrapper的所有設(shè)置吏饿,變成一個(gè)剛生成的QueryWrapper。

usersQueryWrapper.clear();

(7)可以優(yōu)化的點(diǎn):
按照我們的習(xí)慣蔬浙,平時(shí)我們寫代碼是下面這樣的:

if (StringUtils.isNotBlank(name)) {
    query.like(Entity::getName, name)
}
if (age != null && age >= 0) {
    query.eq(Entity::getAge, age)
}

就是如果沒有傳name參數(shù), 其實(shí)是沒有必要添加這個(gè)條件的. 滿足一定條件才會(huì)把查詢條件加上去. 寫的多了, 就很麻煩, 而用MyBatis-Plus的構(gòu)造器, 你就可以這么寫:

query.like(StringUtils.isNotBlank(name), Entity::getName, name)
     .eq(age!=null && age >= 0, Entity::getAge, age)

這第一個(gè)參數(shù)就叫做condition猪落。這樣的話就不用反復(fù)的用if條件判斷, 還可以把條件串聯(lián)著寫。

(8)orderByDesc畴博、orderByAsc 使用說明
orderByDesc表示降序笨忌,orderByAsc表示升序,示例:

queryWrapper.orderByDesc("id");

(9)last 使用說明:
last 表示sql語句最后拼接俱病,示例:

queryWrapper.last("limit 1");

(10) select 使用說明:
select表示查詢指定的列官疲,示例:

 queryWrapper.select("id","name");
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末杂曲,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子袁余,更是在濱河造成了極大的恐慌擎勘,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,470評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件颖榜,死亡現(xiàn)場離奇詭異棚饵,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)掩完,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,393評論 3 392
  • 文/潘曉璐 我一進(jìn)店門噪漾,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人且蓬,你說我怎么就攤上這事欣硼。” “怎么了恶阴?”我有些...
    開封第一講書人閱讀 162,577評論 0 353
  • 文/不壞的土叔 我叫張陵诈胜,是天一觀的道長。 經(jīng)常有香客問我冯事,道長焦匈,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,176評論 1 292
  • 正文 為了忘掉前任昵仅,我火速辦了婚禮缓熟,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘摔笤。我一直安慰自己够滑,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,189評論 6 388
  • 文/花漫 我一把揭開白布吕世。 她就那樣靜靜地躺著彰触,像睡著了一般。 火紅的嫁衣襯著肌膚如雪寞冯。 梳的紋絲不亂的頭發(fā)上渴析,一...
    開封第一講書人閱讀 51,155評論 1 299
  • 那天,我揣著相機(jī)與錄音吮龄,去河邊找鬼。 笑死咆疗,一個(gè)胖子當(dāng)著我的面吹牛漓帚,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播午磁,決...
    沈念sama閱讀 40,041評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼尝抖,長吁一口氣:“原來是場噩夢啊……” “哼毡们!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起昧辽,我...
    開封第一講書人閱讀 38,903評論 0 274
  • 序言:老撾萬榮一對情侶失蹤衙熔,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后搅荞,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體红氯,經(jīng)...
    沈念sama閱讀 45,319評論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,539評論 2 332
  • 正文 我和宋清朗相戀三年咕痛,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了痢甘。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,703評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡茉贡,死狀恐怖塞栅,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情腔丧,我是刑警寧澤放椰,帶...
    沈念sama閱讀 35,417評論 5 343
  • 正文 年R本政府宣布,位于F島的核電站愉粤,受9級特大地震影響庄敛,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜科汗,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,013評論 3 325
  • 文/蒙蒙 一藻烤、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧头滔,春花似錦怖亭、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,664評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至早歇,卻和暖如春倾芝,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背箭跳。 一陣腳步聲響...
    開封第一講書人閱讀 32,818評論 1 269
  • 我被黑心中介騙來泰國打工晨另, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人谱姓。 一個(gè)月前我還...
    沈念sama閱讀 47,711評論 2 368
  • 正文 我出身青樓借尿,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子路翻,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,601評論 2 353

推薦閱讀更多精彩內(nèi)容

  • 1. MyBatisPlus概述 為什么要學(xué)習(xí)它呢狈癞?MyBatisPlus可以節(jié)省我們大量工作時(shí)間,所有的CRUD...
    彈鋼琴的崽崽閱讀 1,989評論 0 3
  • MyBatisPlus MyBatisPlus簡稱mp,是mybatis的增強(qiáng)工具,在mybatis的基礎(chǔ)上只做增...
    幻如常閱讀 460評論 0 0
  • 一茂契、MP 是什么 MP全稱Mybatis-Plus蝶桶,套用官方的解釋便是成為 MyBatis 最好的搭檔,簡稱基友。...
    陳二狗想吃肉閱讀 1,505評論 0 4
  • 01-MyBatisPlus簡介 一掉冶、簡介 官網(wǎng):http://mp.baomidou.com/ 參考教程:htt...
    刊ing閱讀 295評論 0 0
  • 轉(zhuǎn)載于:https://mp.weixin.qq.com/s/wyymQUcK1QeCRfoxhd_d7w[htt...
    上善若淚閱讀 2,121評論 0 2