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

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

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

MyBatis Xml映射文件字符串替換

字符串替換

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

比如,像 ORDER BY,你可以這樣來(lái)使用:

ORDER BY ${columnName}

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

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

舉個(gè)例子

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

@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

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

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

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

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

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

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

Mybatis中字符串替換問(wèn)題

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

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

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

重要:接受從用戶輸出的內(nèi)容并提供給語(yǔ)句中不變的字符串,這樣做是不安全的。這會(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攻擊問(wèn)題!

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

相關(guān)文章

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

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

    這篇文章主要介紹了SpringMVC Mybatis配置多個(gè)數(shù)據(jù)源并切換代碼詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(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的簡(jiǎn)單、省內(nèi)存的讀寫(xiě)Excel的開(kāi)源項(xiàng)目。在盡可能節(jié)約內(nèi)存的情況下支持讀寫(xiě)百M(fèi)的Excel。本文將在SpringBoot中整合EasyExcel進(jìn)行大數(shù)據(jù)處理,感興趣的可以了解一下
    2022-05-05
  • java 生成文字圖片的示例代碼

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

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

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

    讓我們創(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ù)庫(kù)的依賴項(xiàng),接下來(lái)介紹Spring?Boot應(yīng)用中如何動(dòng)態(tài)指定數(shù)據(jù)庫(kù),實(shí)現(xiàn)不同用戶不同數(shù)據(jù)庫(kù)的場(chǎng)景?,需要的朋友可以參考下
    2024-04-04
  • 詳解如何將JAR包發(fā)布到Maven中央倉(cāng)庫(kù)

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

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

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

    這篇文章主要介紹了Mockito mock Kotlin Object類方法報(bào)錯(cuò)解決方法,本篇文章通過(guò)簡(jiǎn)要的案例,講解了該項(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)過(guò)程詳解

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

    AOP為Aspect Oriented Programming的縮寫(xiě),意為:面向切面編程,可通過(guò)運(yùn)行期動(dòng)態(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?通過(guò)一個(gè)中心式的調(diào)度平臺(tái),調(diào)度多個(gè)執(zhí)行器執(zhí)行任務(wù),調(diào)度中心通過(guò)?DB?鎖保證集群分布式調(diào)度的一致性,這樣擴(kuò)展執(zhí)行器會(huì)增大?DB?的壓力,然而大部分公司的任務(wù)數(shù),執(zhí)行器并不多;xxl-job?提供了非常好用的監(jiān)控頁(yè)面甚至還有任務(wù)失敗的郵件告警功能
    2023-01-01

最新評(píng)論

化德县| 楚雄市| 康乐县| 昌黎县| 南郑县| 淮北市| 阿瓦提县| 陵水| 瑞昌市| 肃南| 永川市| 巢湖市| 井冈山市| 怀仁县| 武宁县| 闸北区| 上虞市| 平顺县| 大名县| 同心县| 格尔木市| 汾西县| 南木林县| 峨边| 班玛县| 蒙自县| 会泽县| 双柏县| 纳雍县| 息烽县| 鹤岗市| 棋牌| 成武县| 伊金霍洛旗| 虹口区| 北流市| 武汉市| 绥江县| 英吉沙县| 雅安市| 阿荣旗|