欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

MyBatisPlus中使用or()和and()遇到的問(wèn)題及細(xì)節(jié)處理

 更新時(shí)間:2020年08月26日 10:51:31   作者:番茄炒蛋不加蛋  
這篇文章主要介紹了MyBatisPlus中使用or()和and()遇到的問(wèn)題,本文通過(guò)多種寫(xiě)法實(shí)例代碼相結(jié)合給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下

在項(xiàng)目中使用MyBatisPlus中的or()查詢時(shí)由于誤用,導(dǎo)致查詢數(shù)據(jù)不對(duì),僅作記錄。

寫(xiě)法一:

LambdaQueryWrapper<Task> queryWrapper = new QueryWrapper<Task>().lambda();
 queryWrapper
  .eq(Task::getUserId, "15")
  .eq(Task::getStatus, 2)
  .or()
  .eq(Task::getFileSize, 3251544304L);

上面這種寫(xiě)法等價(jià)于下面的sql

SELECT * FROM task WHERE user_id = ? AND status = ? OR file_size = ? 

寫(xiě)法二:

LambdaQueryWrapper<Task> queryWrapper2 = new QueryWrapper<Task>().lambda();
 queryWrapper2
  .eq(Task::getUserId, "15")
  .and(wrapper -> wrapper.eq(Task::getStatus, 2).or().eq(Task::getFileSize, 3251544304L));

上面這種寫(xiě)法對(duì)應(yīng)的sql如下

SELECT * FROM task WHERE user_id = ? AND ( status = ? OR file_size = ? )

SpringBoot 集成 MyBatisPlus 配置文件添加以下配置即可在控制臺(tái)查看 sql

mybatis-plus.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl

PS:下面看下Mybatis中and和or的細(xì)節(jié)處理

當(dāng)一條SQL中既有條件查又有模糊查的時(shí)候,偶爾會(huì)遇到這樣的and拼接問(wèn)題。參考如下代碼:

<select id="listSelectAllBusiness">
  select * from ***
  where 
  <if test="a!= null">
   a = #{a}
  </if>
  <if test="b!= null">
   and b in
   <foreach collection="list" index="index" item="item" open="(" separator="," close=")">
    #{item}
   </foreach>
  </if>
  <if test="c!= null">
   and name like '%${c}%' or code like '%${c}%'
  </if>
   order by id desc
   limit #{limit} offset #{page}
</select>

這樣寫(xiě)的錯(cuò)誤是如果a==null那么第二個(gè)條件中就會(huì)多一個(gè)and,語(yǔ)句會(huì)變成select * from *** where and b in (...),而如果條件全都不滿足的話SQL會(huì)變成select * from *** where order by id desc limit...解決辦法:加上<where>標(biāo)簽,如下:

<select id="listSelectAllBusiness">
  select * from ***
  <where> 
  <if test="a!= null">
   a = #{a}
  </if>
  <if test="b!= null">
   and b in
   <foreach collection="list" index="index" item="item" open="(" separator="," close=")">
    #{item}
   </foreach>
  </if>
  <if test="c!= null">
   and name like '%${c}%' or code like '%${c}%'
  </if>
  </where>
   order by id desc
   limit #{limit} offset #{page}
</select>

如上代碼所示,加上一個(gè)<where>標(biāo)簽即可,where標(biāo)簽會(huì)自動(dòng)識(shí)別,如果前面條件不滿足的話,會(huì)自己去掉and。如果滿足的話會(huì)自己加上and。但是這句語(yǔ)句還是有問(wèn)題,就是c條件里的語(yǔ)句里面有一個(gè)or,如果前面全部ab條件中有滿足的話就會(huì)形成這樣的SQL,select * from *** where a = ? and name like '%%' or code like '%%',這條就類似SQL注入了,只要后面or條件滿足都能查出來(lái),不滿足需求。解決辦法:給c條件的語(yǔ)句加上(),如下:

<select id="listSelectAllBusiness">
  select * from ***
  <where> 
  <if test="a!= null">
   a = #{a}
  </if>
  <if test="b!= null">
   and b in
   <foreach collection="list" index="index" item="item" open="(" separator="," close=")">
    #{item}
   </foreach>
  </if>
  <if test="c!= null">
   and (name like '%${c}%' or code like '%${c}%')
  </if>
  </where>
   order by id desc
   limit #{limit} offset #{page}
</select>

總結(jié)

到此這篇關(guān)于MyBatisPlus中使用or()和and()遇到的問(wèn)題的文章就介紹到這了,更多相關(guān)MyBatisPlus中使用or()和and()內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 更改eclipse的JDK版本詳細(xì)步驟

    更改eclipse的JDK版本詳細(xì)步驟

    我們用eclipse在做項(xiàng)目的時(shí)候會(huì)切換jdk版本,本地運(yùn)行的項(xiàng)目所使用的jdk版本比Linux服務(wù)器高(低),需要調(diào)低(高)JDK版本,這篇文章主要給大家介紹了關(guān)于如何更改eclipse的JDK版本的相關(guān)資料,需要的朋友可以參考下
    2023-11-11
  • Java try-catch-finally異常處理機(jī)制詳解

    Java try-catch-finally異常處理機(jī)制詳解

    這篇文章主要介紹了Java try-catch-finally異常處理機(jī)制詳解,本篇文章通過(guò)簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-08-08
  • 重新認(rèn)識(shí)Java的System.in

    重新認(rèn)識(shí)Java的System.in

    今天小編就為大家分享一篇關(guān)于重新認(rèn)識(shí)Java的System.in,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧
    2018-12-12
  • SpringData整合ElasticSearch實(shí)現(xiàn)CRUD的示例代碼(超詳細(xì))

    SpringData整合ElasticSearch實(shí)現(xiàn)CRUD的示例代碼(超詳細(xì))

    本文主要介紹了SpringData整合ElasticSearch實(shí)現(xiàn)CRUD的示例代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-07-07
  • Java解除文件占用即Dom4j操作后實(shí)現(xiàn)xml關(guān)流

    Java解除文件占用即Dom4j操作后實(shí)現(xiàn)xml關(guān)流

    這篇文章主要介紹了Java解除文件占用即Dom4j操作后實(shí)現(xiàn)xml關(guān)流,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-04-04
  • Lucene實(shí)現(xiàn)多種高級(jí)搜索形式

    Lucene實(shí)現(xiàn)多種高級(jí)搜索形式

    這篇文章主要介紹了Lucene實(shí)現(xiàn)多種高級(jí)搜索形式的相關(guān)資料,需要的朋友可以參考下
    2017-04-04
  • Java多線程系列之JDK并發(fā)包舉例詳解

    Java多線程系列之JDK并發(fā)包舉例詳解

    Java并發(fā)包提供了許多用于多線程編程的類和接口,這篇文章主要給大家介紹了關(guān)于Java多線程系列之JDK并發(fā)包的相關(guān)資料,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2024-03-03
  • springboot整合apache ftpserver詳細(xì)教程(推薦)

    springboot整合apache ftpserver詳細(xì)教程(推薦)

    這篇文章主要介紹了springboot整合apache ftpserver詳細(xì)教程,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-01-01
  • Java多線程并發(fā)的指令重排序問(wèn)題及volatile寫(xiě)屏障原理詳解

    Java多線程并發(fā)的指令重排序問(wèn)題及volatile寫(xiě)屏障原理詳解

    這篇文章主要介紹了Java多線程并發(fā)的指令重排序問(wèn)題及volatile寫(xiě)屏障原理詳解,指令重排序是編譯器或處理器為了提高性能而對(duì)指令執(zhí)行順序進(jìn)行重新排列的優(yōu)化技術(shù),需要的朋友可以參考下
    2024-01-01
  • springboot整合kaptcha生成驗(yàn)證碼功能

    springboot整合kaptcha生成驗(yàn)證碼功能

    這篇文章主要介紹了springboot整合kaptcha生成驗(yàn)證碼,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-10-10

最新評(píng)論