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

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

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

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

${}

不會自動加 ' ',如果傳入?yún)?shù)為簡單類型,那么必須寫 ${value},如果是對象,寫的是${屬性名};

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

#{}

對于字符串會自動加 ' ',如果傳入?yún)?shù)為簡單類型,可以寫 ${任意值},如果是對象,寫的是${屬性名}

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

#{}和${}取值符號

如圖,兩個方法的參數(shù)類型為簡單類型,簡單類型包括8大基本類型和String

  • 1. #{}取值符號會自動為String類型的參數(shù)加上‘’單引號
  • 2. ${}取值符號不會自動為String加上‘’單引號

當sql標簽的查詢代碼是 select * from t_user where username =  ‘lyx’;

這種情況,需要使用自動加上單引號的#{}:select * from t_user where username = #{username}

當查詢數(shù)據(jù)降序排序時:

UserDao接口如下:

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

UserMapper.xml文件如下:

 

調用

  • queryUserOrderByColumn(String column)運行結果

      

  • queryUserOrderByColumn2(String column)運行結果2

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

所以對于動態(tài)排序的sql語句,要用${},而不用#{}

對于排序正確 的代碼是

select * from t_user order by username desc

如果使用#{},會自動為String類型添加單引號,變成

select * from t_user order by 'username' desc

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

來看使用${}的第二種情況:模糊查詢

sql語句應該是,

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

顯然,使用 ${},不自動添加單引號才是正確的

調用運行

運行結果:

總結

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

相關文章

  • Java面向對象基礎教學(一)

    Java面向對象基礎教學(一)

    這篇文章主要介紹了Java的面相對象編程思想,包括類對象方法和封裝繼承多態(tài)等各個方面的OOP基本要素,非常推薦,需要的朋友可以參考下,希望可以對你有所幫助
    2021-07-07
  • Mybatis-Plus中and()和or()的使用與原理詳解

    Mybatis-Plus中and()和or()的使用與原理詳解

    最近發(fā)現(xiàn)MyBatisPlus還是挺好用的,下面這篇文章主要給大家介紹了關于Mybatis-Plus中and()和or()的使用與原理的相關資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-09-09
  • ManyToMany單向、雙向:@JoinTable的使用

    ManyToMany單向、雙向:@JoinTable的使用

    這篇文章主要介紹了ManyToMany單向、雙向:@JoinTable的使用方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-12-12
  • java&javascript自定義加密數(shù)據(jù)傳輸代碼示例

    java&javascript自定義加密數(shù)據(jù)傳輸代碼示例

    這篇文章主要介紹了java&javascript自定義加密數(shù)據(jù)傳輸代碼示例,具有一定參考價值,需要的朋友可以了解下。
    2017-11-11
  • Java Callable接口實現(xiàn)細節(jié)詳解

    Java Callable接口實現(xiàn)細節(jié)詳解

    這篇文章主要介紹了Java Callable接口實現(xiàn)細節(jié)詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-05-05
  • Java多線程 線程狀態(tài)原理詳解

    Java多線程 線程狀態(tài)原理詳解

    這篇文章主要介紹了Java多線程 線程狀態(tài)原理詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-02-02
  • Spring Cache的基本使用與實現(xiàn)原理詳解

    Spring Cache的基本使用與實現(xiàn)原理詳解

    緩存是實際工作中非經(jīng)常常使用的一種提高性能的方法, 我們會在很多場景下來使用緩存。下面這篇文章主要給大家介紹了關于Spring Cache的基本使用與實現(xiàn)原理的相關資料,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考下
    2018-05-05
  • 深入理解Java虛擬機_動力節(jié)點Java學院整理

    深入理解Java虛擬機_動力節(jié)點Java學院整理

    虛擬機是一種抽象化的計算機,通過在實際的計算機上模擬各種計算機功能來實現(xiàn)的,下面通過本文給大家分享Java虛擬機相關知識,感興趣的朋友一起看看吧
    2017-06-06
  • 簡單了解Java垃圾回收器的種類

    簡單了解Java垃圾回收器的種類

    這篇文章主要介紹了簡單了解Java垃圾回收器的種類,具有一定借鑒價值,需要的朋友可以參考下。
    2017-12-12
  • Mybatis動態(tài)SQL之IF語句詳解

    Mybatis動態(tài)SQL之IF語句詳解

    這篇文章主要給大家介紹了關于Mybatis動態(tài)SQL之IF語句的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-05-05

最新評論