91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

MyBatis?Xml映射文件中的字符串替換方式是什么

發布時間:2021-11-26 13:11:37 來源:億速云 閱讀:285 作者:柒染 欄目:開發技術

這篇文章將為大家詳細講解有關MyBatis Xml映射文件中的字符串替換方式是什么,文章內容質量較高,因此小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關知識有一定的了解。

    MyBatis Xml映射文件字符串替換

    字符串替換

    默認情況下,使用 #{} 格式的語法會導致 MyBatis 創建 PreparedStatement 參數占位符并安全地設置參數(就像使用 ? 一樣)。 這樣做更安全,更迅速,通常也是首選做法,不過有時你就是想直接在 SQL 語句中插入一個不轉義的字符串。

    比如,像 ORDER BY,你可以這樣來使用:

    ORDER BY ${columnName}

    這里 MyBatis 不會修改或轉義字符串。

    當 SQL 語句中的元數據(如表名或列名)是動態生成的時候,字符串替換將會非常有用。

    舉個例子

    如果你想通過任何一列從表中 select 數據時,不需要像下面這樣寫:

    @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);

    這個想法也同樣適用于用來替換表名的情況。

    提示:用這種方式接受用戶的輸入,并將其用于語句中的參數是不安全的,會導致潛在的 SQL 注入攻擊,因此要么不允許用戶輸入這些字段,要么自行轉義并檢驗。

    Mybatis中字符串替換問題

    默認情況下,使用#{}格式的語法會導致MyBatis創建預處理語句屬性并以它為背景設置安全的值(比如?)。這樣做很安全,很迅速也是首選做法!

    有時只想直接在SQL語句中插入一個不改變的字符串.比如,像ORDER BY,你可以這樣來使用:ORDER BY ${column}

    這里MyBatis不會修改或轉義字符串。

    重要:接受從用戶輸出的內容并提供給語句中不變的字符串,這樣做是不安全的。這會導致潛在的SQL注入攻擊,因此你不應該允許用戶輸入這些字段,或者通常自行轉義并檢查!

    錯誤方式:

    ORDER BY fupdated ${sort, jdbcType=VARCHAR}, fcreated ${sort, jdbcType=VARCHAR}

    正確方式:

    ORDER BY fupdated ${sort}, fcreated ${sort}

    前提條件:請對sort進行必要驗證,防止sql攻擊問題!

    關于MyBatis Xml映射文件中的字符串替換方式是什么就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

    向AI問一下細節

    免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

    AI

    富川| 镇康县| 昆明市| 梅河口市| 从江县| 印江| 电白县| 静宁县| 越西县| 张家界市| 江陵县| 珲春市| 修水县| 旬阳县| 沅陵县| 和林格尔县| 徐州市| 乌鲁木齐市| 京山县| 宣威市| 大化| 蛟河市| 军事| 开原市| 翁源县| 波密县| 呼图壁县| 时尚| 舒兰市| 新巴尔虎左旗| 广汉市| 荔波县| 琼海市| 稻城县| 兴山县| 乐亭县| 家居| 兴业县| 射阳县| 泾源县| 衡阳市|