MyBatis?Xml映射文件之字符串替換方式
MyBatis Xml映射文件字符串替換
字符串替換
默認情況下,使用 #{} 格式的語法會導致 MyBatis 創(chuàng)建 PreparedStatement 參數(shù)占位符并安全地設置參數(shù)(就像使用 ? 一樣)。 這樣做更安全,更迅速,通常也是首選做法,不過有時你就是想直接在 SQL 語句中插入一個不轉義的字符串。
比如,像 ORDER BY,你可以這樣來使用:
ORDER BY ${columnName}
這里 MyBatis 不會修改或轉義字符串。
當 SQL 語句中的元數(shù)據(jù)(如表名或列名)是動態(tài)生成的時候,字符串替換將會非常有用。
舉個例子
如果你想通過任何一列從表中 select 數(shù)據(jù)時,不需要像下面這樣寫:
@Select("select * from user where id = #{id}") User findById(@Param("id") long id); @Select("select * from user where name = #{name}") User findByName(@Param("name") String name); @Select("select * from user where email = #{email}") User findByEmail(@Param("email") String email); // and more "findByXxx" method
可以只寫這樣一個方法:
@Select("select * from user where ${column} = #{value}") User findByColumn(@Param("column") String column, @Param("value") String value);
其中 ${column} 會被直接替換,而 #{value} 會被使用 ? 預處理。 因此你就可以像下面這樣來達到上述功能:
User userOfId1 = userMapper.findByColumn("id", 1L); User userOfNameKid = userMapper.findByColumn("name", "kid"); User userOfEmail = userMapper.findByColumn("email", noone@nowhere.com);
這個想法也同樣適用于用來替換表名的情況。
提示:用這種方式接受用戶的輸入,并將其用于語句中的參數(shù)是不安全的,會導致潛在的 SQL 注入攻擊,因此要么不允許用戶輸入這些字段,要么自行轉義并檢驗。
Mybatis中字符串替換問題
默認情況下,使用#{}格式的語法會導致MyBatis創(chuàng)建預處理語句屬性并以它為背景設置安全的值(比如?)。這樣做很安全,很迅速也是首選做法!
有時只想直接在SQL語句中插入一個不改變的字符串.比如,像ORDER BY,你可以這樣來使用:ORDER BY ${column}
這里MyBatis不會修改或轉義字符串。
重要:接受從用戶輸出的內(nèi)容并提供給語句中不變的字符串,這樣做是不安全的。這會導致潛在的SQL注入攻擊,因此你不應該允許用戶輸入這些字段,或者通常自行轉義并檢查!
錯誤方式:
ORDER BY fupdated ${sort, jdbcType=VARCHAR}, fcreated ${sort, jdbcType=VARCHAR}
正確方式:
ORDER BY fupdated ${sort}, fcreated ${sort}
前提條件:請對sort進行必要驗證,防止sql攻擊問題!
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
Java集合排序規(guī)則接口Comparator用法解析
這篇文章主要介紹了Java集合排序規(guī)則接口Comparator用法解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下2020-09-09Java中將List拆分為多個小list集合的實現(xiàn)代碼
這篇文章主要介紹了Java中如何將List拆分為多個小list集合,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-03-03maven倉庫repositories和mirrors的配置及區(qū)別詳解
這篇文章主要介紹了maven倉庫repositories和mirrors的配置及區(qū)別詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2020-07-07idea2020.1版本git提交項目到github上的方法
這篇文章主要介紹了idea2020.1版本git提交項目到github上的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2020-06-06