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

mybatis中${}和#{}的區(qū)別以及底層原理分析

 更新時(shí)間:2024年05月07日 10:30:48   作者:JinF~  
這篇文章主要介紹了mybatis中${}和#{}的區(qū)別以及底層原理,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

${}和#{}的區(qū)別以及底層原理

${}

不會(huì)自動(dòng)加 ' ',如果傳入?yún)?shù)為簡(jiǎn)單類(lèi)型,那么必須寫(xiě) ${value},如果是對(duì)象,寫(xiě)的是${屬性名};

底層解析的時(shí)候只要sql語(yǔ)句包含 ${ } ,在創(chuàng)建cofigration對(duì)象的時(shí)候,這條sql就會(huì)被解析成動(dòng)態(tài)類(lèi)型的語(yǔ)句,底層不會(huì)把 ${ } 轉(zhuǎn)成 " ? "(不做處理),只會(huì)在使用Mapper接口代理對(duì)象進(jìn)行數(shù)據(jù)操作的時(shí)候把#{ }轉(zhuǎn)成 " ? ",之后再調(diào)用JDBC進(jìn)行賦值,把${ }轉(zhuǎn)成mapper接口的參數(shù)值,所以會(huì)存在SQL注入的問(wèn)題

#{}

對(duì)于字符串會(huì)自動(dòng)加 ' ',如果傳入?yún)?shù)為簡(jiǎn)單類(lèi)型,可以寫(xiě) ${任意值},如果是對(duì)象,寫(xiě)的是${屬性名}

底層解析的時(shí)候如果sql語(yǔ)句只包含 #{ } ,這條sql就會(huì)被解析成靜態(tài)類(lèi)型的語(yǔ)句,會(huì)把 #{ }轉(zhuǎn)成 " ? ",進(jìn)行數(shù)據(jù)操作時(shí)調(diào)用JDBC進(jìn)行賦值

#{}和${}取值符號(hào)

如圖,兩個(gè)方法的參數(shù)類(lèi)型為簡(jiǎn)單類(lèi)型,簡(jiǎn)單類(lèi)型包括8大基本類(lèi)型和String

  • 1. #{}取值符號(hào)會(huì)自動(dòng)為String類(lèi)型的參數(shù)加上‘’單引號(hào)
  • 2. ${}取值符號(hào)不會(huì)自動(dòng)為String加上‘’單引號(hào)

當(dāng)sql標(biāo)簽的查詢(xún)代碼是 select * from t_user where username =  ‘lyx’;

這種情況,需要使用自動(dòng)加上單引號(hào)的#{}:select * from t_user where username = #{username}

當(dāng)查詢(xún)數(shù)據(jù)降序排序時(shí):

UserDao接口如下:

select * from t_user order by 排序字段名 desc

UserMapper.xml文件如下:

 

調(diào)用

  • queryUserOrderByColumn(String column)運(yùn)行結(jié)果

      

  • queryUserOrderByColumn2(String column)運(yùn)行結(jié)果2

  • 看數(shù)據(jù)庫(kù)中的數(shù)據(jù),說(shuō)明方法1沒(méi)有成功降序排序

所以對(duì)于動(dòng)態(tài)排序的sql語(yǔ)句,要用${},而不用#{}

對(duì)于排序正確 的代碼是

select * from t_user order by username desc

如果使用#{},會(huì)自動(dòng)為String類(lèi)型添加單引號(hào),變成

select * from t_user order by 'username' desc

所以查不到數(shù)據(jù)

來(lái)看使用${}的第二種情況:模糊查詢(xún)

sql語(yǔ)句應(yīng)該是,

LIKE_ (單個(gè)任意字符)
列名 LIKE ‘張_'
LIKE % (任意長(zhǎng)度的任意字符)
列名 LIKE ‘張%'

顯然,使用 ${},不自動(dòng)添加單引號(hào)才是正確的

調(diào)用運(yùn)行

運(yùn)行結(jié)果:

總結(jié)

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

相關(guān)文章

  • 圖數(shù)據(jù)庫(kù)NebulaGraph的Java 數(shù)據(jù)解析實(shí)踐與指導(dǎo)詳解

    圖數(shù)據(jù)庫(kù)NebulaGraph的Java 數(shù)據(jù)解析實(shí)踐與指導(dǎo)詳解

    這篇文章主要介紹了圖數(shù)據(jù)庫(kù)NebulaGraph的Java 數(shù)據(jù)解析實(shí)踐與指導(dǎo)詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-04-04
  • SpringBoot使用?Sleuth?進(jìn)行分布式跟蹤的過(guò)程分析

    SpringBoot使用?Sleuth?進(jìn)行分布式跟蹤的過(guò)程分析

    Spring Boot Sleuth是一個(gè)分布式跟蹤解決方案,它可以幫助您在分布式系統(tǒng)中跟蹤請(qǐng)求并分析性能問(wèn)題,Spring Boot Sleuth是Spring Cloud的一部分,它提供了分布式跟蹤的功能,本文將介紹如何在Spring Boot應(yīng)用程序中使用Sleuth進(jìn)行分布式跟蹤,感興趣的朋友一起看看吧
    2023-10-10
  • java實(shí)現(xiàn)微信搶紅包算法

    java實(shí)現(xiàn)微信搶紅包算法

    這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)微信搶紅包算法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-09-09
  • SpringBoot學(xué)習(xí)篇之@Valid與@Validated的區(qū)別

    SpringBoot學(xué)習(xí)篇之@Valid與@Validated的區(qū)別

    @Valid是使用Hibernate?validation的時(shí)候使用,@Validated是只用Spring?Validator校驗(yàn)機(jī)制使用,下面這篇文章主要給大家介紹了關(guān)于SpringBoot學(xué)習(xí)篇之@Valid與@Validated區(qū)別的相關(guān)資料,需要的朋友可以參考下
    2022-11-11
  • 基于注解的組件掃描詳解

    基于注解的組件掃描詳解

    這篇文章主要介紹了基于注解的組件掃描詳解,具有一定借鑒價(jià)值,需要的朋友可以參考下。
    2017-12-12
  • 在service層注入mapper時(shí)報(bào)空指針的解決

    在service層注入mapper時(shí)報(bào)空指針的解決

    這篇文章主要介紹了在service層注入mapper時(shí)報(bào)空指針的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-06-06
  • SpringBoot集成Liquibase的詳細(xì)步驟

    SpringBoot集成Liquibase的詳細(xì)步驟

    Liquibase 是一個(gè)強(qiáng)大的數(shù)據(jù)庫(kù)版本控制工具,能夠與 Spring Boot
    無(wú)縫集成,以簡(jiǎn)化數(shù)據(jù)庫(kù)遷移和管理的過(guò)程,以下是從開(kāi)始集成到最終運(yùn)行的詳細(xì)步驟,需要的朋友可以參考下
    2024-12-12
  • JAVA中 redisTemplate 和 jedis的配合使用操作

    JAVA中 redisTemplate 和 jedis的配合使用操作

    這篇文章主要介紹了JAVA中 redisTemplate 和 jedis的配合使用操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2021-02-02
  • Java非法字符: ‘\ufeff‘問(wèn)題及說(shuō)明

    Java非法字符: ‘\ufeff‘問(wèn)題及說(shuō)明

    這篇文章主要介紹了Java非法字符: ‘\ufeff‘問(wèn)題及說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-02-02
  • Arrays.sort(arr)是什么排序及代碼邏輯

    Arrays.sort(arr)是什么排序及代碼邏輯

    在學(xué)習(xí)過(guò)程中觀察到Arrays.sort(arr)算法可以直接進(jìn)行排序,但不清楚底層的代碼邏輯是什么樣子,今天通過(guò)本文給大家介紹下Arrays.sort(arr)是什么排序,感興趣的朋友一起看看吧
    2022-02-02

最新評(píng)論