国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Java > 正文

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

2019-11-26 13:16:08
字體:
來源:轉載
供稿:網友

#{變量名}可以進行預編譯、類型匹配等操作,#{變量名}會轉化為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中#號與美元符號的區別,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對武林網網站的支持!

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 车致| 房山区| 尉氏县| 南安市| 巴楚县| 邵阳县| 甘孜县| 五华县| 张家界市| 博兴县| 安福县| 伊金霍洛旗| 桃园市| 新丰县| 崇礼县| 鲁山县| 辰溪县| 涞源县| 博罗县| 边坝县| 敖汉旗| 和平区| 金门县| 鹿邑县| 磐安县| 无锡市| 壤塘县| 辽源市| 广宁县| 蒙城县| 衡阳县| 永修县| 九台市| 泗阳县| 永昌县| 天镇县| 温宿县| 永济市| 大荔县| 那曲县| 普定县|