1. 程式人生 > >mybatis.xml文件中#與$符號的區別以及數學符號的處理

mybatis.xml文件中#與$符號的區別以及數學符號的處理

文件 integer order by rep select map 以及 方式 動態

1.

#{}表示一個占位符號,通過#{}可以實現preparedStatement向占位符中設置值,自動進行java類型和jdbc類型轉換,#{}可以有效防止sql註入。 #{}可以接收簡單類型值或pojo屬性值。 如果parameterType傳輸單個簡單類型值,#{}括號中可以是value或其它名稱。

使用#傳入參數是,sql語句解析是會加上"",比如 select * from table where name = #{name} ,傳入的name為小李,那麽最後打印出來的就是

select * from table where name = ‘小李’,就是會當成字符串來解析,這樣相比於$的好處是比較明顯對的吧,#{}傳參能防止sql註入,如果你傳入的參數為 單引號‘,那麽如果使用${},這種方式 那麽是會報錯的。

另外一種場景是,如果你要做動態的排序,比如 order by column,這個時候務必要用${},因為如果你使用了#{},那麽打印出來的將會是

select * from table order by ‘name‘ ,這樣是沒用。

即:能用#就最好不用$.

2.

如果在mapper.xml裏使用>,<,>=,<=等能破壞xml格式的符號,會引起
mybaits無法正常解析xml文件。

解決方法是將sql語句寫在<![CDATA[sql語句]]>中
<select id="test" resultType="java.lang.Integer">
<![CDATA[
select 1<2
]]>
</select>

mybatis.xml文件中#與$符號的區別以及數學符號的處理