欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

MyBatis?Xml映射文件之字符串替換方式

 更新時(shí)間:2021年11月26日 10:48:00   作者:yaoshengting  
這篇文章主要介紹了MyBatis?Xml映射文件之字符串替換方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

MyBatis Xml映射文件字符串替換

字符串替換

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

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

ORDER BY ${columnName}

這里 MyBatis 不會(huì)修改或轉(zhuǎn)義字符串。

當(dāng) SQL 語句中的元數(shù)據(jù)(如表名或列名)是動(dòng)態(tài)生成的時(shí)候,字符串替換將會(huì)非常有用。

舉個(gè)例子

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

@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

可以只寫這樣一個(gè)方法:

@Select("select * from user where ${column} = #{value}")
User findByColumn(@Param("column") String column, @Param("value") String value);

其中 ${column} 會(huì)被直接替換,而 #{value} 會(huì)被使用 ? 預(yù)處理。 因此你就可以像下面這樣來達(dá)到上述功能:

User userOfId1 = userMapper.findByColumn("id", 1L);
User userOfNameKid = userMapper.findByColumn("name", "kid");
User userOfEmail = userMapper.findByColumn("email", noone@nowhere.com);

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

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

Mybatis中字符串替換問題

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

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

這里MyBatis不會(huì)修改或轉(zhuǎn)義字符串。

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

錯(cuò)誤方式:

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

正確方式:

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

前提條件:請(qǐng)對(duì)sort進(jìn)行必要驗(yàn)證,防止sql攻擊問題!

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • 詳解Spring AOP 實(shí)現(xiàn)主從讀寫分離

    詳解Spring AOP 實(shí)現(xiàn)主從讀寫分離

    本篇文章主要介紹了Spring AOP 實(shí)現(xiàn)主從讀寫分離,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-03-03
  • Java超詳細(xì)講解WebMvcConfigurer攔截器

    Java超詳細(xì)講解WebMvcConfigurer攔截器

    這篇文章將用實(shí)例來和大家介紹一下WebMvcConfigurer攔截器。文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)Java有一定的幫助,需要的可以參考一下
    2022-06-06
  • Java集合排序規(guī)則接口Comparator用法解析

    Java集合排序規(guī)則接口Comparator用法解析

    這篇文章主要介紹了Java集合排序規(guī)則接口Comparator用法解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-09-09
  • SpringBoot中的事務(wù)回滾規(guī)則詳解

    SpringBoot中的事務(wù)回滾規(guī)則詳解

    這篇文章主要介紹了SpringBoot中的事務(wù)回滾規(guī)則詳解,事務(wù)是指一系列的操作,這些操作要么全部成功,要么全部失敗。在Spring Boot中,我們可以使用事務(wù)管理器來管理事務(wù),在使用事務(wù)管理器的時(shí)候,一個(gè)非常重要的概念就是事務(wù)回滾,需要的朋友可以參考下
    2023-07-07
  • Java中將List拆分為多個(gè)小list集合的實(shí)現(xiàn)代碼

    Java中將List拆分為多個(gè)小list集合的實(shí)現(xiàn)代碼

    這篇文章主要介紹了Java中如何將List拆分為多個(gè)小list集合,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-03-03
  • Java常用工具類庫——Hutool的使用簡介

    Java常用工具類庫——Hutool的使用簡介

    這篇文章主要介紹了Java常用工具類庫——Hutool的使用簡介,幫助大家更好的理解和學(xué)習(xí)使用Java,感興趣的朋友可以了解下
    2021-04-04
  • maven倉庫repositories和mirrors的配置及區(qū)別詳解

    maven倉庫repositories和mirrors的配置及區(qū)別詳解

    這篇文章主要介紹了maven倉庫repositories和mirrors的配置及區(qū)別詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-07-07
  • idea2020.1版本git提交項(xiàng)目到github上的方法

    idea2020.1版本git提交項(xiàng)目到github上的方法

    這篇文章主要介紹了idea2020.1版本git提交項(xiàng)目到github上的方法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2020-06-06
  • JAVA多線程之中斷機(jī)制及處理中斷的方法

    JAVA多線程之中斷機(jī)制及處理中斷的方法

    這篇文章主要記錄使用 interrupt() 方法中斷線程,以及如何對(duì)InterruptedException進(jìn)行處理,感覺對(duì)InterruptedException異常進(jìn)行處理是一件謹(jǐn)慎且有技巧的活兒,需要的朋友可以參考下
    2023-02-02
  • springboot如何通過URL方式訪問外部資源

    springboot如何通過URL方式訪問外部資源

    這篇文章主要介紹了springboot如何通過URL方式訪問外部資源,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-12-12

最新評(píng)論