mybatis 模糊查詢like需要注意的地方

2021-10-10 19:18:23 字數 3269 閱讀 8112

"findarticles"

resultmap

="findarticlbycategoryid"

>

select id,title,author,publishdate,readtimes,content,flag,category_id from cms_article

>

test

="condition.begintime!=null"

>

publishdate >= #

if>

test

="condition.endtime!=null"

>

and publishdate #

if>

test

="condition.keywords!=null"

>

and title like binary '%#%'

if>

where

>

limit #,#

select

>

通過#{}取值的寫法會報錯:

parameter index out of range (n > number of parameters, which is n-1)
因為#{}引數取值發生在單引號內,會被當成字串,以至於讓mybatis識別時少乙個引數。

i、通過concat拼接字串 (推薦)

"findarticles"

resultmap

="findarticlbycategoryid"

>

select id,title,author,publishdate,readtimes,content,flag,category_id from cms_article

>

test

="condition.begintime!=null"

>

publishdate >= #

if>

test

="condition.endtime!=null"

>

and publishdate #

if>

test

="condition.keywords!=null"

>

and title like concat('%',#,'%')

if>

where

>

limit #,#

select

>

ii、引數取值換成換成${}

"findarticles"

resultmap

="findarticlbycategoryid"

>

select id,title,author,publishdate,readtimes,content,flag,category_id from cms_article

>

test

="condition.begintime!=null"

>

publishdate >= #

if>

test

="condition.endtime!=null"

>

and publishdate #

if>

test

="condition.keywords!=null"

>

and title like binary '%$%'

if>

where

>

limit #,#

select

>

這樣做不好的地方:通過$ {}的方式拼接的sql語句,不再是以佔位符的形式生成sql,而是以拼接字串的方式生成sql,這樣做會引發sql注入的問題。

如果要避免引發sql注入問題發生,也可以用concat拼接方式。注意下加上單引號,因為${}是不帶單引號的,而#{}是帶單引號的!

"findarticles"

resultmap

="findarticlbycategoryid"

>

select id,title,author,publishdate,readtimes,content,flag,category_id from cms_article

>

test

="condition.begintime!=null"

>

publishdate >= #

if>

test

="condition.endtime!=null"

>

and publishdate #

if>

test

="condition.keywords!=null"

>

and title like concat('%','$','%')

if>

where

>

limit #,#

select

>

如果mysql 5.5 以上版本進行模糊查詢時出現了中文不能正確轉碼的問題,可以加上binary關鍵字。當然,為了避免這種問題的發生,也可以盡量新增上。

"findarticles"

resultmap

="findarticlbycategoryid"

>

select id,title,author,publishdate,readtimes,content,flag,category_id from cms_article

>

test

="condition.begintime!=null"

>

publishdate >= #

if>

test

="condition.endtime!=null"

>

and publishdate #

if>

test

="condition.keywords!=null"

>

and title like binary concat('%',#,'%')

if>

where

>

limit #,#

select

>

mybatis中LIKE模糊查詢

mybatis中對於使用like來進行模糊查詢的幾種方式 使用 由於 是引數直接注入的,導致這種寫法,大括號裡面不能註明jdbctype,不然會報錯org.mybatis.spring.mybatissystemexception nested exception is org.apache.iba...

mybatis3 like模糊查詢小結

現在的專案用的是mybatis3,不是ibatis,大同小異的。沒什麼。今天在用like作模糊查詢時,遇到小小的問題,在此作個小結。記得以前ibatis時,可以這樣寫的 select from student where sname like sname 為了安全,也不提倡這種寫法了。在網上搜了一大...

like 模糊查詢

sql 模糊查詢 逗號,在sql中like中不需要轉義,但是如果 在sql中的某個欄位值用 分隔資料,需要獲取資料的時候直接把 拆分成資料,獲得乙個資料的list。例如 需要查詢某欄位是否包含乙個值,111是否存在於1111,2111,1112,1121,1113這個欄位中 因為根據 逗號分開,要求...