av一区二区在线观看_亚洲男人的天堂网站_日韩亚洲视频_在线成人免费_欧美日韩精品免费观看视频_久草视

您的位置:首頁技術文章
文章詳情頁

Mybatis order by 動態傳參出現的問題及解決方法

瀏覽:7日期:2023-10-18 14:04:54
問題由來

一個簡單的需求,要求把和當前用戶相關的數據置頂展示。

這里,我用了一個簡單的用戶表來復現這個需求。

Mybatis order by 動態傳參出現的問題及解決方法

很簡單,查詢語句后面加上:order by t.login_name=’wulaoer’ desc 就行了。

如下所示,吳老二就到頂了。

Mybatis order by 動態傳參出現的問題及解決方法

那Mybatis腳本怎么寫呢?

就這么寫👇🏻

<select resultType='cn.fighter3.entity.User'>select * from user torder by t.login_name=#{req.currentUser} desc </select>

OK,需求完成,測試,摸……

嗯,出bug了……

問題現場

定晴一看控制臺,報錯了。

Mybatis order by 動態傳參出現的問題及解決方法

最關鍵的一行:

java.sql.SQLException: Parameter index out of range (1 > number of parameters, which is 0).

問題分析

問題很簡單,隨手一查,原因是:

#{}傳過來的參數帶單引號

#{}采用預編譯機制,是占位符,#{}傳入參數是以字符串傳入,會將SQL中的#{}替換為?號,調用PreparedStatement的set方法來賦值。

這種方式,order by 最后的sql會多加單引號 ’ 。

那怎么解決呢?

可以用 ${}。${}是拼接符,直接字符串替換。

<select resultType='cn.fighter3.entity.User'>select * from user torder by t.login_name=${req.currentUser} desc </select>

我不想用${}這種方式,因為有sql注入的風險,那該怎么辦呢?

好吧,其實主要是這種方式也報錯了😓。

java.sql.SQLSyntaxErrorException: Unknown column ’wulaoer’ in ’order clause’

我們平時模糊查詢怎么寫呢?

——使用CONCAT()函數來拼接keyword。

以此類推,那我用一個函數來去掉’不就行了。

那用一個什么函數呢?

——REPLACE

所以寫法就變成了這樣:

<select resultType='cn.fighter3.entity.User'>select * from user torder by t.login_name=REPLACE(#{req.currentUser},’’’,’’) desc </select>問題解決

OK,最終問題解決。

<select resultType='cn.fighter3.entity.User'>select * from user torder by t.login_name=REPLACE(#{req.currentUser},’’’,’’) desc </select>

上去吧,吳老二!

Mybatis order by 動態傳參出現的問題及解決方法

問題比較簡單,處理起來也是三下五除二,但是分析的過程還有點意思,所以發出來給大家瞧瞧。

到此這篇關于Mybatis order by 動態傳參出現的一個小bug的文章就介紹到這了,更多相關Mybatis order by 動態傳參出現的一個小bug內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: Mybatis 數據庫
相關文章:
主站蜘蛛池模板: 黄色片免费看视频 | 日韩一区在线播放 | 色爱综合网 | 九九亚洲 | 久久精品网 | 日韩一区二区在线观看 | 一区二区中文字幕 | 欧美激情一区二区 | 美女毛片免费看 | 性欧美精品一区二区三区在线播放 | 一级视频黄色 | 日日碰狠狠躁久久躁96avv | 黄色片网站在线观看 | jlzzjlzz欧美大全 | 一级黄在线观看 | 亚洲精品一区二区三区在线 | av电影一区 | 精品在线一区 | 成人午夜影院 | 午夜视频在线免费观看 | 国产一区二区在线视频 | 在线视频 亚洲 | 羞羞网站免费观看 | 超碰97在线免费 | 久久久高清 | 欧美日韩18| 精品不卡 | 日本久久精品视频 | 在线成人| 亚洲国产视频一区二区 | 久久99精品久久久久 | 国产视频一区在线观看 | 成人av一区二区三区 | 亚洲精品色 | 久久久久成人精品免费播放动漫 | 中文字幕中文字幕 | 久草在线在线精品观看 | 日日噜噜夜夜爽爽狠狠 | 中文一区二区 | 紧缚调教一区二区三区视频 | 久久99久久久久 |