最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

MyBatis使用<foreach>標簽like查詢報錯解決問題

 更新時間:2024年03月09日 14:55:44   作者:Charge8  
這篇文章主要介紹了MyBatis使用<foreach>標簽like查詢報錯解決問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教

動態(tài)SQL使用可查看官方文檔:

一、foreach標簽 IN查詢

<foreach>標簽使用場景最多的就是在構(gòu)建 IN 條件語句的時候進行遍歷集合。

實例如下:

    List<UserDO> getByIds(@Param("ids") List<Long> ids);


    <select id="getByIds" resultMap="BaseResultMap">
      SELECT * FROM t_user
      WHERE id IN
      <foreach collection="ids" item="id" separator="," open="(" close=")">
        #{id}
      </foreach>
    </select>

單元測試:訪問是OK。

    @Test
    public void testGetByIds() {
        List<Long> ids = Arrays.asList(1L, 2L, 3L);
        List<UserDO> userDOList = userMapper.getByIds(ids);
        System.out.println(userDOList);
    }

二、foreach標簽 like查詢

按照上面的使用,如果有個業(yè)務(wù)需要用到 LIKE遍歷查詢時。

我們通過在<foreach>標簽中構(gòu)建 LIKE 條件語句進行遍歷集合時,竟然出錯了

實例代碼:

  List<UserDO> getLikeByUsername(@Param("userNameList") List<String> userNameList);


  <select id="getLikeByUsername" resultMap="BaseResultMap">
    SELECT * FROM t_user
    WHERE
    <foreach collection="userNameList" item="userName" separator="OR" open="(" close=")">
      user_name LIKE concat('%', #{userName}, '%')
    </foreach>
  </select>

單元測試:

    @Test
    public void testGetLikeByUsername() {
        List<String> userNameList = Arrays.asList("趙", "后", "趙云");
        List<UserDO> userDOList = userMapper.getLikeByUsername(userNameList);

        System.out.println(userDOList);
    }

報錯信息如下:

在 foreach標簽中取值出的錯,網(wǎng)上查閱資料說是因為 parameterType接收的參數(shù)不是List導(dǎo)致的,具體情況未核實。

解決方案

解決方法比較簡單,或一種取值方式即可,將 foreach標簽中遍歷出來的值換如下方式獲取。

user_name LIKE concat('%',concat(#{userName},'%')) -- 個人比較推薦使用
user_name LIKE concat(‘%', #{userNameList[${idx}]}, ‘%')

SQL語句如下:

<select id="getLikeByUsername" resultMap="BaseResultMap">
  SELECT * FROM t_user
  WHERE
  <foreach collection="userNameList" item="userName" separator="OR" open="(" close=")" index="idx">
    user_name LIKE concat('%',concat(#{userName},'%'))
    --       user_name LIKE concat('%', #{userNameList[${idx}]}, '%')
  </foreach>
</select>

如果你想使用注解方式的話,mapper如下:

    @Select({"<script>",
            "SELECT * FROM t_user\n" +
                    "    WHERE\n" +
                    "    <foreach collection=\"userNameList\" item=\"userName\" separator=\"OR\" open=\"(\" close=\")\">\n" +
                    "      user_name LIKE concat('%',concat(#{userName},'%'))\n" +
                    "    </foreach>",
            "</script>"})
    List<UserDO> getLikeByUsername2(@Param("userNameList") List<String> userNameList);

再次訪問單元測試OK。

總結(jié)

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • IDEA2020 1.1中Plugins加載不出來的問題及解決方法

    IDEA2020 1.1中Plugins加載不出來的問題及解決方法

    這篇文章主要介紹了IDEA2020 1.1中Plugins加載不出來的問題,本文還給大家提到了IDEA 2020.1.1 找不到程序包和符號的問題,感興趣的朋友跟隨小編一起看看吧
    2020-06-06
  • Java?Spring讀取和存儲詳細操作

    Java?Spring讀取和存儲詳細操作

    這篇文章主要介紹了Spring讀取和存儲詳細操作,文章圍繞主題展開詳細的內(nèi)容介紹,具有一定的參考價值,需要的小伙伴可以參考一下
    2022-08-08
  • Java類加載的過程詳解

    Java類加載的過程詳解

    這篇文章主要介紹了深入理解Java 類加載全過程的相關(guān)資料,小編覺得寫的還不錯,需要的朋友可以參考下,希望能夠給你帶來幫助
    2021-09-09
  • java9區(qū)分opens與exports

    java9區(qū)分opens與exports

    本篇文章主要給大家講述了java9中opens與exports的區(qū)別以及用法的不同之處,一起學(xué)習(xí)下吧。
    2018-02-02
  • JavaGUI界面實現(xiàn)頁面跳轉(zhuǎn)方法

    JavaGUI界面實現(xiàn)頁面跳轉(zhuǎn)方法

    這篇文章主要給大家介紹了關(guān)于JavaGUI界面實現(xiàn)頁面跳轉(zhuǎn)的相關(guān)資料, GUI是指圖形用戶界面,指采用圖形方式顯示的計算機操作用戶界面,需要的朋友可以參考下
    2023-07-07
  • 基于dubbo中Listener的實現(xiàn)方法

    基于dubbo中Listener的實現(xiàn)方法

    下面小編就為大家?guī)硪黄赿ubbo中Listener的實現(xiàn)方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-08-08
  • SpringBoot實現(xiàn)六邊形架構(gòu)的三種不同方式詳解

    SpringBoot實現(xiàn)六邊形架構(gòu)的三種不同方式詳解

    六邊形架構(gòu),也被稱為端口與適配器架構(gòu)或洋蔥架構(gòu),是一種將業(yè)務(wù)邏輯與外部依賴解耦的架構(gòu)模式,本文將介紹在SpringBoot中實現(xiàn)六邊形架構(gòu)的三種不同方式
    2025-06-06
  • Redisson分布式鎖原理深入分析

    Redisson分布式鎖原理深入分析

    文章介紹了Redisson分布式鎖的工作原理,并詳細解釋了加鎖、續(xù)期、解鎖的核心流程,Redisson利用Redis的單線程、自動續(xù)期和Lua腳本原子性等特點,避免了傳統(tǒng)鎖常見的死鎖、鎖爭用和誤刪等問題,此外,還總結(jié)了使用Redisson分布式鎖時的注意事項和避坑點
    2026-04-04
  • MyBatis-Plus 默認不更新null的4種方法

    MyBatis-Plus 默認不更新null的4種方法

    本文主要介紹了MyBatis-Plus 默認不更新null的4種方法,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2026-01-01
  • IntelliJ IDEA中設(shè)置數(shù)據(jù)庫連接全局共享的步驟詳解

    IntelliJ IDEA中設(shè)置數(shù)據(jù)庫連接全局共享的步驟詳解

    本文詳解IntelliJ IDEA數(shù)據(jù)庫連接全局共享設(shè)置,通過創(chuàng)建/選擇數(shù)據(jù)源并設(shè)為全局,實現(xiàn)多項目間統(tǒng)一連接,提升效率、減少配置錯誤,感興趣的可以了解一下
    2025-07-07

最新評論

临沭县| 蓝山县| 徐水县| 旅游| 鄂州市| 宣武区| 涡阳县| 兴仁县| 焉耆| 偏关县| 略阳县| 基隆市| 日土县| 枣阳市| 蒙自县| 阜平县| 临泉县| 如皋市| 罗平县| 武宣县| 高碑店市| 公主岭市| 武宁县| 马关县| 廉江市| 黄陵县| 保靖县| 胶州市| 齐河县| 桦甸市| 宾川县| 安乡县| 浪卡子县| 叙永县| 广德县| 苏尼特左旗| 焦作市| 凤台县| 丰城市| 万荣县| 尖扎县|