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

MyBatis中#{}和${}的區(qū)別詳解

 更新時(shí)間:2016年08月18日 11:12:34   作者:jason.bai  
mybatis和ibatis總體來講都差不多的。下面小編給大家探討下mybatis中#{}和${}的區(qū)別,感興趣的朋友一起學(xué)習(xí)吧

最近在用mybatis,之前用過ibatis,總體來說差不多,不過還是遇到了不少問題,再次記錄下.

先給大家介紹下MyBatis中#{}和${}的區(qū)別,具體介紹如下:

1. #將傳入的數(shù)據(jù)都當(dāng)成一個(gè)字符串,會(huì)對(duì)自動(dòng)傳入的數(shù)據(jù)加一個(gè)雙引號(hào)。如:order by #user_id#,如果傳入的值是111,那么解析成sql時(shí)的值為order by "111", 如果傳入的值是id,則解析成的sql為order by "id".

2. $將傳入的數(shù)據(jù)直接顯示生成在sql中。如:order by $user_id$,如果傳入的值是111,那么解析成sql時(shí)的值為order by user_id, 如果傳入的值是id,則解析成的sql為order by id.

3. #方式能夠很大程度防止sql注入?!?br />

4.$方式無法防止Sql注入。

5.$方式一般用于傳入數(shù)據(jù)庫對(duì)象,例如傳入表名.

6.一般能用#的就別用$.

MyBatis排序時(shí)使用order by 動(dòng)態(tài)參數(shù)時(shí)需要注意,用$而不是#

字符串替換

默認(rèn)情況下,使用#{}格式的語法會(huì)導(dǎo)致MyBatis創(chuàng)建預(yù)處理語句屬性并以它為背景設(shè)置安全的值(比如?)。這樣做很安全,很迅速也是首選做法,有時(shí)你只是想直接在SQL語句中插入一個(gè)不改變的字符串。比如,像ORDER BY,你可以這樣來使用:
ORDER BY ${columnName}

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

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

mybatis本身的說明:

String Substitution
By default, using the #{} syntax will cause MyBatis to generate PreparedStatement properties and set the values safely against the PreparedStatement parameters (e.g. ?). While this is safer, faster and almost always preferred, sometimes you just want to directly inject a string unmodified into the SQL Statement. For example, for ORDER BY, you might use something like this:
ORDER BY ${columnName}
Here MyBatis won't modify or escape the string.
NOTE It's not safe to accept input from a user and supply it to a statement unmodified in this way. This leads to potential SQL Injection attacks and therefore you should either disallow user input in these fields, or always perform your own escapes and checks. 

從上文可以看出:

1. 使用#{}格式的語法在mybatis中使用Preparement語句來安全的設(shè)置值,執(zhí)行sql類似下面的:

PreparedStatement ps = conn.prepareStatement(sql);
ps.setInt(1,id); 

這樣做的好處是:更安全,更迅速,通常也是首選做法。

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

ORDER BY ${columnName} 

此時(shí)MyBatis 不會(huì)修改或轉(zhuǎn)義字符串。

這種方式類似于:

Statement st = conn.createStatement();
ResultSet rs = st.executeQuery(sql); 

這種方式的缺點(diǎn)是:

以這種方式接受從用戶輸出的內(nèi)容并提供給語句中不變的字符串是不安全的,會(huì)導(dǎo)致潛在的 SQL 注入攻擊,因此要么不允許用戶輸入這些字段,要么自行轉(zhuǎn)義并檢驗(yàn)。

相關(guān)文章

  • Java HttpClient執(zhí)行請(qǐng)求時(shí)配置cookie流程詳細(xì)講解

    Java HttpClient執(zhí)行請(qǐng)求時(shí)配置cookie流程詳細(xì)講解

    這篇文章主要介紹了Java HttpClient執(zhí)行請(qǐng)求時(shí)配置cookie流程,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧
    2023-02-02
  • Springboot2.6.x高版本與Swagger2版本沖突問題解決方法

    Springboot2.6.x高版本與Swagger2版本沖突問題解決方法

    Spring Boot 2.6.x版本引入依賴?springfox-boot-starter?(Swagger?3.0) 后,啟動(dòng)容器會(huì)報(bào)錯(cuò),本文就介紹一下Springboot2.6.x高版本與Swagger2版本沖突問題解決方法,感興趣的可以了解一下
    2022-04-04
  • Spring對(duì)事務(wù)管理的支持

    Spring對(duì)事務(wù)管理的支持

    今天小編就為大家分享一篇關(guān)于Spring對(duì)事務(wù)管理的支持,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧
    2019-01-01
  • spring boot 中設(shè)置默認(rèn)網(wǎng)頁的方法

    spring boot 中設(shè)置默認(rèn)網(wǎng)頁的方法

    這篇文章主要介紹了spring boot 中設(shè)置默認(rèn)網(wǎng)頁的方法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-04-04
  • 詳解Spring中的@Scope注解

    詳解Spring中的@Scope注解

    這篇文章主要介紹了詳解Spring中的@Scope注解,@Scope注解是Spring IOC容器中的一個(gè)作用域,在Spring IOC容器中,他用來配置Bean實(shí)例的作用域?qū)ο?需要的朋友可以參考下
    2023-07-07
  • Spring Boot 中的 @PutMapping 注解原理及使用小結(jié)

    Spring Boot 中的 @PutMapping 注解原理及使用小結(jié)

    在本文中,我們介紹了 Spring Boot 中的 @PutMapping 注解,它可以將 HTTP PUT 請(qǐng)求映射到指定的處理方法上,我們還介紹了 @PutMapping 注解的原理以及如何在 Spring Boot 中使用它,感興趣的朋友跟隨小編一起看看吧
    2023-12-12
  • SpringMVC 向jsp頁面?zhèn)鬟f數(shù)據(jù)庫讀取到的值方法

    SpringMVC 向jsp頁面?zhèn)鬟f數(shù)據(jù)庫讀取到的值方法

    下面小編就為大家分享一篇SpringMVC 向jsp頁面?zhèn)鬟f數(shù)據(jù)庫讀取到的值方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2018-03-03
  • java獲取properties屬性文件示例

    java獲取properties屬性文件示例

    Properties類表示了一個(gè)持久的屬性集。Properties可保存在流中或從流中加載。屬性列表中每個(gè)鍵及其對(duì)應(yīng)值都是一個(gè)字符串。本文使用java讀取這些屬性,看下面詳細(xì)介紹吧
    2014-01-01
  • JAVA讀取PDF、WORD文檔實(shí)例代碼

    JAVA讀取PDF、WORD文檔實(shí)例代碼

    本篇文章主要通過實(shí)例代碼介紹了JAVA讀取PDF、WORD文檔,需要的朋友可以參考下
    2017-04-04
  • springMVC獲取請(qǐng)求參數(shù)的幾種方式匯總

    springMVC獲取請(qǐng)求參數(shù)的幾種方式匯總

    在日常使用SpringMVC進(jìn)行開發(fā)的時(shí)候,有可能遇到前端各種類型的請(qǐng)求參數(shù),這里做一次相對(duì)全面的總結(jié),下面這篇文章主要給大家介紹了關(guān)于springMVC獲取請(qǐng)求參數(shù)的幾種方式,需要的朋友可以參考下
    2022-04-04

最新評(píng)論

四平市| 枣阳市| 汉寿县| 壶关县| 乐平市| 龙泉市| 遵义市| 泰安市| 巴青县| 江川县| 潢川县| 夏邑县| 凉山| 巴南区| 揭阳市| 射阳县| 海晏县| 金坛市| 绥阳县| 庆城县| 海口市| 封丘县| 马边| 深泽县| 西畴县| 灌云县| 甘南县| 西乌珠穆沁旗| 德清县| 西丰县| 兴隆县| 曲麻莱县| 随州市| 丰宁| 玛曲县| 新巴尔虎右旗| 苍溪县| 什邡市| 永嘉县| 金平| 长武县|