最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

MyBatis Xml映射文件字符串替換

字符串替換

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

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

ORDER BY ${columnName}

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

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

舉個(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} 會被直接替換,而 #{value} 會被使用 ? 預(yù)處理。 因此你就可以像下面這樣來達(dá)到上述功能:

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

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

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

Mybatis中字符串替換問題

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

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

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

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

錯(cuò)誤方式:

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

正確方式:

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

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

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

相關(guān)文章

  • SpringMVC Mybatis配置多個(gè)數(shù)據(jù)源并切換代碼詳解

    SpringMVC Mybatis配置多個(gè)數(shù)據(jù)源并切換代碼詳解

    這篇文章主要介紹了SpringMVC Mybatis配置多個(gè)數(shù)據(jù)源并切換代碼詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-11-11
  • java學(xué)生信息管理系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)

    java學(xué)生信息管理系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)

    這篇文章主要為大家詳細(xì)介紹了java學(xué)生信息管理系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-01-01
  • SpringBoot整合EasyExcel進(jìn)行大數(shù)據(jù)處理的方法詳解

    SpringBoot整合EasyExcel進(jìn)行大數(shù)據(jù)處理的方法詳解

    EasyExcel是一個(gè)基于Java的簡單、省內(nèi)存的讀寫Excel的開源項(xiàng)目。在盡可能節(jié)約內(nèi)存的情況下支持讀寫百M(fèi)的Excel。本文將在SpringBoot中整合EasyExcel進(jìn)行大數(shù)據(jù)處理,感興趣的可以了解一下
    2022-05-05
  • java 生成文字圖片的示例代碼

    java 生成文字圖片的示例代碼

    本篇文章主要介紹了java 生成文字圖片的示例代碼,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-08-08
  • Spring?Boot應(yīng)用中如何動態(tài)指定數(shù)據(jù)庫實(shí)現(xiàn)不同用戶不同數(shù)據(jù)庫的問題

    Spring?Boot應(yīng)用中如何動態(tài)指定數(shù)據(jù)庫實(shí)現(xiàn)不同用戶不同數(shù)據(jù)庫的問題

    讓我們創(chuàng)建一個(gè) Spring Boot 項(xiàng)目首先設(shè)置一個(gè)具有必要依賴項(xiàng)的新 Spring Boot項(xiàng)目,在項(xiàng)目配置中包括 Spring Web、Spring Data JPA 和關(guān)于數(shù)據(jù)庫的依賴項(xiàng),接下來介紹Spring?Boot應(yīng)用中如何動態(tài)指定數(shù)據(jù)庫,實(shí)現(xiàn)不同用戶不同數(shù)據(jù)庫的場景?,需要的朋友可以參考下
    2024-04-04
  • 詳解如何將JAR包發(fā)布到Maven中央倉庫

    詳解如何將JAR包發(fā)布到Maven中央倉庫

    這篇文章主要介紹了詳解如何將JAR包發(fā)布到Maven中央倉庫,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2019-01-01
  • Mockito mock Kotlin Object類方法報(bào)錯(cuò)解決方法

    Mockito mock Kotlin Object類方法報(bào)錯(cuò)解決方法

    這篇文章主要介紹了Mockito mock Kotlin Object類方法報(bào)錯(cuò)解決方法,本篇文章通過簡要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-09-09
  • Java中Mybatis,SpringMVC,Spring的介紹及聯(lián)系

    Java中Mybatis,SpringMVC,Spring的介紹及聯(lián)系

    這篇文章主要為大家詳細(xì)介紹了Java中Mybatis,SpringMVC,Spring的介紹及聯(lián)系,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-10-10
  • Spring AOP的概念與實(shí)現(xiàn)過程詳解

    Spring AOP的概念與實(shí)現(xiàn)過程詳解

    AOP為Aspect Oriented Programming的縮寫,意為:面向切面編程,可通過運(yùn)行期動態(tài)代理實(shí)現(xiàn)程序功能的統(tǒng)一維護(hù)的一種技術(shù)。AOP是 Spring框架中的一個(gè)重要內(nèi)容
    2023-02-02
  • Java?Elastic-Job分布式定時(shí)任務(wù)使用方法介紹

    Java?Elastic-Job分布式定時(shí)任務(wù)使用方法介紹

    xxl-job?通過一個(gè)中心式的調(diào)度平臺,調(diào)度多個(gè)執(zhí)行器執(zhí)行任務(wù),調(diào)度中心通過?DB?鎖保證集群分布式調(diào)度的一致性,這樣擴(kuò)展執(zhí)行器會增大?DB?的壓力,然而大部分公司的任務(wù)數(shù),執(zhí)行器并不多;xxl-job?提供了非常好用的監(jiān)控頁面甚至還有任務(wù)失敗的郵件告警功能
    2023-01-01

最新評論

通渭县| 遵义市| 荆门市| 和林格尔县| 罗甸县| 南投市| 金寨县| 宝应县| 湖州市| 乐清市| 依安县| 商都县| 会昌县| 汕头市| 江门市| 长葛市| 靖安县| 姜堰市| 枣强县| 尉犁县| 叙永县| 江门市| 逊克县| 华亭县| 开阳县| 东安县| 淮阳县| 慈溪市| 板桥市| 车险| 凤山县| 五莲县| 河北省| 石泉县| 陆良县| 东乡族自治县| 金坛市| 印江| 汨罗市| 太原市| 芦溪县|