1. 程式人生 > >Mybatis中$和#取數據的區別

Mybatis中$和#取數據的區別

bat con 分別是 style key strong 取出 bsp 因此

Mybatis配置中,取出map入參的數據一般有兩種方式#{key}${key}下面是這兩種取值的區別:

  以同樣的語句做對比:

<select id="geUserByParam1" resultType="Map" parameterType="Map">
        select * from t_user t where t.name=#{name} and t.password=#{password}
</select>
<select id="geUserByParam2" resultType="Map" parameterType="Map"
> select * from t_user t where t.name=${name} and t.password=${password} </select>

  如果傳入的name和password參數分別是:admin和123456。

#{key}取值後執行的sql是select * from t_user t where t.name=‘admin‘ and t.password=‘123456‘

${key}取值後執行的sql是select * from t_user t where t.name=admin and t.password=123456

很明顯,#{key}取值會自動將值看成是字符串類型,並帶上單引號;而${key}取值就是傳的值是啥就是啥。由此可見#{key}取值可以防止sql註入,而${key}取值可能會引起sql註入情況。有的時候用模糊查詢可能會用到${key}取值,比如:

<select id="geUserByParam3" resultType="Map" parameterType="Map">
        select * from t_user t where t.name like ‘%${name}%‘
</select>

其實這種情況也可以用#{key}來代替的:

<select id="geUserByParam3" resultType="Map" parameterType="Map">
        select * from t_user t where t.name like concat(‘%‘,#{name},‘%‘)
</select>

因此建議盡量在開發中用#{key}取值,這樣確實可以避免一些問題!

註意:本文僅代表個人理解和看法喲!和本人所在公司和團體無任何關系!

Mybatis中$和#取數據的區別