1. 程式人生 > >mybatis 中 ${} 和 #{} 的區別,以及轉義符

mybatis 中 ${} 和 #{} 的區別,以及轉義符

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}

     ]]>