程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> MyBatis中#號與美元符號的區別

MyBatis中#號與美元符號的區別

編輯:關於JAVA

MyBatis中#號與美元符號的區別。本站提示廣大學習愛好者:(MyBatis中#號與美元符號的區別)文章只能為提供參考,不一定能成為您想要的結果。以下是MyBatis中#號與美元符號的區別正文


#{變量名}可以停止預編譯、類型婚配等操作,#{變量名}會轉化為jdbc的類型。

select * from tablename where id = #{id}

假定id的值為12,其中假如數據庫字段id為字符型,那麼#{id}表示的就是'12',假如id為整型,那麼id就是12,並且MyBatis會將下面SQL語句轉化為jdbc的select * from tablename where id=?,把?參數設置為id的值。

${變量名}不停止數據類型婚配,直接交換。

select * from tablename where id = ${id}

假如字段id為整型,sql語句就不會出錯,但是假如字段id為字符型, 那麼sql語句應該寫成

select * from table where id = '${id}'

#方式可以很大水平避免sql注入。

$方式無法方式sql注入。

$方式普通用於傳入數據庫對象,例如傳入表名。

盡量多用#方式,少用$方式。

mybatis框架作為一款半自動化的耐久層框架,其sql語句都要我們自己來手動編寫,這個時分當然需求避免sql注入。其實Mybatis的sql是一個具有“輸出+輸入”功用,相似於函數的構造,如下:

select id="getBlogById" resultType="Blog" parameterType=”int”>
select id,title,author,content 
from blog where id=#{id} 
</select>

這裡,parameterType標示了輸出的參數類型,resultType標示了輸入的參數類型。回應上文,假如我們想避免sql注入,天經地義地要在輸出參數上下功夫。下面代碼中高亮局部即輸出參數在sql中拼接的局部,傳入參數後,打印出執行的sql語句,會看到sql是這樣的:

select id,title,author,content from blog where id = ?

不論輸出什麼參數,打印出的sql都是這樣的。這是由於mybatis啟用了預編譯功用,在sql執行前,會先將下面的sql發送給數據庫停止編譯,執行時,直接運用編譯好的sql,交換占位符“?”就可以了。由於sql注入只能對編譯進程起作用,所以這樣的方式就很好地防止了sql注入的問題。

以上所述是給大家引見的MyBatis中#號與美元符號的區別,希望對大家有所協助,假如大家有任何疑問請給我留言,會及時回復大家的。在此也十分感激大家對網站的支持!

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved