日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Mybatis之占位符与拼接符

發布時間:2024/4/17 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Mybatis之占位符与拼接符 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1.占位符

? ? 1.1? 含義:

? ? ? ? 在持久化框架中,為了將約束條件中的可變參數從sql中分離出來,在原有的參數位置使用特殊的標記來標記該位置,后期通過代碼給sql傳遞參數(即實現sql與代碼分離開)。這個特殊的標記被稱為占位符。

? ? 1.2 優點:

? ? ? ? 1.2.1 防止sql注入,提高了安全性

? ? ? ? 1.2.2 對于只有參數不同的sql語句,只需要編譯一次{以后會從緩存中獲取}

? ? 1.3 形式:

? ? ? ?? 占位符在持久化框架中的一般形式為:?。Mybatis為了更加方便的與參數列表進行映射,采用的形式為:#{參數名}

? ? 1.4 示例:

SELECT * FROM t_address t where t.id = #{id} --等價于 SELECT * FROM t_address t where t.id =

? ? 1.5 注意:

? ? ? ??占位符只能在約束條件中使用

--持久化框架中,不允許以下形式: SELECT * FROM ? ? SELECT * FROM t_address order by ? ?--mybatis中,不允許以下形式 SELECT * FROM #{tableName} SELECT * FROM t_address order by #{orderBy}

?

2. 拼接符

? ? 2.1 背景:

? ? ? ? 由于占位符只能在sql語句的約束條件中使用,有時候sql語句需要其它的一些變量參數(非約束條件中)來控制,如:表名、排列順序等。所以Mybatis使用了拼接符的概念

? ? 2.2 形式:${參數名}

? ? 2.3 示例:

SELECT * FROM ${tableName}

? ? 2.4 注意:

? ? ? ? 如果參數通過用戶獲取,則不能使用拼接符的形式【會發生sql注入,不安全】

?

3. 補充:

? ? 在進行預編譯的時候,會用參數值直接替換${參數名},用?替換#{參數名}

?

4. sql注入

? ? 4.1 概念:

? ? ? ??將sql語法里的一些組合,通過表單提交或頁面請求注入到sql語句中,欺騙服務器執行惡意sql語句

? ? 4.2 示例:

String id =1 or 1 = 1”; String sql =select * from t_address where id =+id;

? ? 4.2 防止sql注入的方法:

? ? ? ??對于表單提交的數據,使用占位符的形式構建sql語句(占位符不識別參數的sql語法【作為普通字符串】)

String id = “1 or 1 = 1” String sql = “select * from t_address where id = ?”//解析后: select * from t_address where id = ‘1 or 1 = 1’;

?

轉載于:https://www.cnblogs.com/BlueStarWei/p/9385320.html

總結

以上是生活随笔為你收集整理的Mybatis之占位符与拼接符的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。