mybatis 中 ${} 和 #{} 的區別,以及轉義符
阿新 • • 發佈:2018-11-02
1)#{}表示一個佔位符號,通過#{}可以實現preparedStatement向佔位符中設定值,自動進行java型別和jdbc型別轉換,#{}可以有效防止sql注入。#{}可以接收簡單型別值或pojo屬性值。如果parameterType傳輸單個簡單型別值,#{}括號中可以是value或其它名稱。
(2)${}表示拼接sql串,通過${}可以將parameterType傳入的內容拼接在sql中且不進行jdbc型別轉換,${}可以接收簡單型別值或pojo屬性值,如果parameterType傳輸單個簡單型別值,${}括號中只能是value。
注:
(1)簡單型別就是不是自己定義的型別
(2)模糊查詢:'%${value}%' 不可漏掉單引號
mybatis 中的轉義符問題:
在mapper ***.xml中的sql語句中,不能直接用大於號、小於號要用轉義字元
解決方法:
1、轉義字串
小於號 < <
大於號 > >
和 & &
單引號 ' '
雙引號 " "
2、使用<![CDATA[ 你的sql語句 ]]>(sql語句中的<where><if>等標籤不會被解析)
如:
<![CDATA[
select * from
(select t.*, ROWNUM as rowno from tbl_user t where ROWNUM <= #{page.end,jdbcType=DECIMAL}) table_alias
where table_alias.rowno >#{page.start,jdbcType=DECIMAL}
]]>