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

MyBatis模糊查詢報錯:ParserException: not supported.pos 問題解決

 更新時間:2025年04月29日 11:38:30   作者:很少更新  
本文主要介紹了MyBatis模糊查詢報錯:ParserException: not supported.pos 問題解決,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

問題描述

在使用MyBatis執(zhí)行如下SQL時出現(xiàn)Druid解析異常:

 <select id="selectListMzHairVoById" resultMap="MzPinHairMap">
  select ... where pin_no like "%"#{id}"%"
  </select>

報錯信息:

log merge sql error, dbType mysql, druid-1.2.9, sql : ... like '%'?'%' com.alibaba.druid.sql.parser.ParserException: not supported.pos 155...

問題根源

錯誤SQL解析邏輯

MyBatis會將 "%\"#{id}\"%" 解析為:

sql WHERE pin_no LIKE '%'?'%'

導(dǎo)致參數(shù)占位符被單引號包裹,MySQL無法識別這種語法結(jié)構(gòu)

深層原因分析

  • 字符串拼接問題:直接使用"%"#{id}"%"會導(dǎo)致預(yù)編譯參數(shù)位置錯誤
  • SQL注入風(fēng)險:雖然使用#{}是安全的,但錯誤的語法結(jié)構(gòu)可能繞過預(yù)編譯機制
  • Druid嚴格校驗:阿里Druid連接池對SQL語法有嚴格校驗(比MySQL原生更嚴格)

三種解決方案

方案一:使用CONCAT函數(shù)(推薦)

<select id="selectListMzHairVoById" resultMap="MzPinHairMap"> 
SELECT ... 
WHERE pin_no LIKE CONCAT('%', #{id}, '%') 
</select>

優(yōu)勢

  • 符合SQL標準語法
  • 100%預(yù)編譯安全
  • 兼容所有數(shù)據(jù)庫連接池

方案二:bind標簽綁定參數(shù)

<select id="selectListMzHairVoById" resultMap="MzPinHairMap"> 
<bind name="pattern" value="'%' + id + '%'"/> 
SELECT ... WHERE pin_no LIKE #{pattern} 
</select>

適用場景:需要動態(tài)構(gòu)造復(fù)雜匹配模式時使用

方案三:Java端預(yù)拼接參數(shù)

Service層:

public List<MzPinHairVo> query(String id) { 
String searchParam = "%" + id + "%"; 
return mapper.selectListMzHairVoById(searchParam);
 }

Mapper.xml:

<select id="selectListMzHairVoById" resultMap="MzPinHairMap">
 SELECT ... 
 WHERE pin_no LIKE #{id}
  </select>

注意事項:需確保參數(shù)來源可信,防止SQL注入

方案對比

方案安全性可維護性性能跨數(shù)據(jù)庫兼容性
CONCAT★★★★★★★★★★★★
bind標簽★★★★★☆★★☆★★★
Java拼接★★☆★☆☆★★★★★★

到此這篇關(guān)于MyBatis模糊查詢報錯:ParserException: not supported.pos 問題解決的文章就介紹到這了,更多相關(guān)MyBatis模糊查詢報錯內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家! 

相關(guān)文章

  • Spring Boot文件上傳簡單實例代碼

    Spring Boot文件上傳簡單實例代碼

    在本篇文章里小編給大家分享的是關(guān)于Spring Boot 文件上傳簡易教程以及相關(guān)知識點,需要的朋友們參考下。
    2019-08-08
  • Java實現(xiàn)批量下載文件的示例代碼

    Java實現(xiàn)批量下載文件的示例代碼

    這篇文章主要為大家詳細介紹了Java如何實現(xiàn)批量下載文件,并以壓縮輸出流的形式返回前端,文中的示例代碼講解詳細,需要的小伙伴可以參考一下
    2023-10-10
  • 鄰接表無向圖的Java語言實現(xiàn)完整源碼

    鄰接表無向圖的Java語言實現(xiàn)完整源碼

    這篇文章主要介紹了鄰接表無向圖的Java語言實現(xiàn)完整源碼,具有一定借鑒價值,需要的朋友可以參考下。
    2017-12-12
  • javax NotBlank和Email注解失效的解決

    javax NotBlank和Email注解失效的解決

    這篇文章主要介紹了javax NotBlank和Email注解失效的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-08-08
  • Java開啟新線程并傳參方法代碼實現(xiàn)

    Java開啟新線程并傳參方法代碼實現(xiàn)

    這篇文章主要介紹了Java開啟新線程并傳參方法代碼實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-04-04
  • springboot 日志實現(xiàn)過程

    springboot 日志實現(xiàn)過程

    Spring Boot 使用 SLF4J 作為日志門面,Logback 或 Log4j2 作為日志實現(xiàn),日志門面提供統(tǒng)一接口,簡化日志記錄,實現(xiàn)負責(zé)具體功能,Spring Boot 默認使用 SLF4J 和 Logback,可以通過配置文件或注解進行日志記錄和控制,感興趣的朋友一起看看吧
    2025-01-01
  • 通過圖例了解PowerDesigner使用方法

    通過圖例了解PowerDesigner使用方法

    這篇文章主要介紹了通過圖例了解PowerDesigner使用方法,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-08-08
  • Java中~運算符的含義及說明

    Java中~運算符的含義及說明

    Java中的~運算符表示非運算符,即將該數(shù)的所有二進制位全取反,但得到的是補碼形式,需要將其轉(zhuǎn)換為反碼和原碼才能得到最終的十進制結(jié)果
    2025-11-11
  • Mybatis動態(tài)調(diào)用表名和字段名的解決方法

    Mybatis動態(tài)調(diào)用表名和字段名的解決方法

    今天在項目開發(fā)中有個業(yè)務(wù)是需要限制各個用戶對某些表里的字段查詢以及某些字段是否顯示,這種情況下,就需要構(gòu)建sql來動態(tài)傳入表名、字段名了,下面給大家介紹mybatis動態(tài)調(diào)用表名和字段名的解決方法,一起看看吧
    2016-10-10
  • Java 十大排序算法之希爾排序刨析

    Java 十大排序算法之希爾排序刨析

    希爾排序是希爾(Donald Shell)于1959年提出的一種排序算法。希爾排序也是一種插入排序,它是簡單插入排序經(jīng)過改進之后的一個更高效的版本,也稱為縮小增量排序,同時該算法是沖破O(n2)的第一批算法之一。本文會以圖解的方式詳細介紹希爾排序的基本思想及其代碼實現(xiàn)
    2021-11-11

最新評論

乌拉特中旗| 马龙县| 杂多县| 河津市| 永仁县| 叶城县| 犍为县| 进贤县| 河津市| 韶山市| 志丹县| 芒康县| 辽阳县| 华坪县| 广饶县| 陕西省| 巴彦县| 文登市| 斗六市| 四平市| 贵港市| 湘潭县| 汉寿县| 天台县| 宜宾县| 沅江市| 晋江市| 弋阳县| 深圳市| 潮安县| 湘乡市| 海淀区| 门源| 黔西县| 广河县| 奎屯市| 谢通门县| 阿城市| 泸西县| 涡阳县| 楚雄市|