成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

這也許是你不曾留意過(guò)的 Mybatis 細(xì)節(jié)

wupengyu / 2933人閱讀

摘要:當(dāng)有多個(gè)參數(shù)時(shí)一定要指定,否則映射不到對(duì)應(yīng)的字段。另外,中的可以是任意的。

Mybatis 可以說(shuō)是 Java 后端的必備技能,可能你和我一樣經(jīng)常使用到它。但有時(shí) cv 多了,會(huì)忘記了一些細(xì)節(jié)處理,比如為什么要加上這個(gè)注解?它的作用是什么等等。

這篇文章是我以前寫的一些關(guān)于 Mybatis 細(xì)節(jié),希望對(duì)各位有起到查漏補(bǔ)缺的作用。

1. 配置文件

SqlMapConfig.xml 文件各參數(shù)介紹:

?xml version="1.0" encoding="UTF-8" ?>


    
    
        
        
    

    
    
        
        
        
        
        
        
        
        
    

    
    

        
        
        
        

    

    
    
        
            
            
            
            
                
                
                
                
            
        
    


 

        
        

        
        

        
        

2. # 和 $ 的區(qū)別

使用 #{parameterName} 引用參數(shù)的時(shí)候,Mybatis 會(huì)把這個(gè)參數(shù)認(rèn)為是一個(gè)字符串,例如在下面的 sql 傳入?yún)?shù) “Smith”,
Select from emp where name = #{employeeName}

就會(huì)被轉(zhuǎn)換為:
Select from emp where name = ‘Smith’;

同理在下面 sql 傳入?yún)?shù) “Smith”:
Select from emp where name = ${employeeName}

使用的時(shí)候就會(huì)被轉(zhuǎn)換為 :
Select from emp where name = Smith;

簡(jiǎn)單來(lái)說(shuō), #{} 是經(jīng)過(guò)預(yù)編譯的,是安全的,而 ${} 是未經(jīng)過(guò)預(yù)編譯的,僅僅是取變量的值,是非安全的,存在 sql 注入的危險(xiǎn)。# 將傳入的數(shù)據(jù)都當(dāng)成一個(gè)字符串,會(huì)對(duì)自動(dòng)傳入的數(shù)據(jù)加一個(gè)雙引號(hào)。

使用 ${} 的情況,order by、like 語(yǔ)句只能用 ${} 了,用 #{} 會(huì)多個(gè) ’ ’ 導(dǎo)致 sql 語(yǔ)句失效.此外動(dòng)態(tài)拼接 sql,模糊查詢時(shí)也要用 ${}。

舉個(gè)栗子,假如 name=陳,那么該 sql 就是 ... LiKE "%陳%",
DELETE FROM stu WHERE name LIKE "%${name}%"

上面話有點(diǎn)長(zhǎng),這里小小總結(jié)下:
#{} :編譯好 SQL 語(yǔ)句再取值
${} :取值以后再去編譯SQL語(yǔ)句

3. SQL 語(yǔ)句中的列名與關(guān)鍵字沖突時(shí)怎么辦

比如:name 字段。

解決方法:在列名兩邊加上兩個(gè) ` 即可,如下:
DELETE FROM stu WHERE name LIKE "%${name}%"

4. 列名和 bean 屬性名不一樣,導(dǎo)致獲取不到數(shù)據(jù)時(shí)怎么辦

那么為什么會(huì)導(dǎo)致查詢的 SQL 語(yǔ)句無(wú)法得到正確結(jié)果呢?

因?yàn)?mybatis 會(huì)通過(guò)反射得到 bean ,由于字段名和屬性名不一樣,導(dǎo)致無(wú)法將查詢到的表字段數(shù)據(jù) set 到 bean 屬性中。

解決方法:?
【不推薦】修改表字段名稱或 bean 屬性名稱,使它們同名即可

【推薦】修改 標(biāo)簽中的相應(yīng)內(nèi)容,如下圖所示?

5. @Param 參數(shù)的作用

作用:相當(dāng)于給其修飾的參數(shù)指定一個(gè)別名。

若接口只有一個(gè)參數(shù)則可以不用指定別名,List 參數(shù)除外。當(dāng)有多個(gè)參數(shù)時(shí)一定要指定,否則 mybatis 映射不到對(duì)應(yīng)的字段。

如下代碼:
List queryAll(@Param("offset")int offset, @Param("limit")int limit);

該接口方法對(duì)應(yīng)的 mapper 實(shí)現(xiàn)如下:

可以看到 #{} 里面的值是和 @Param("value") 保持一致的,也一定要一致,否則 mybatis 會(huì)找不到這個(gè)值而導(dǎo)致報(bào)錯(cuò)。另外,@Param("value") 中的 value 可以是任意的。

參考:

https://github.com/liyifeng19...

https://github.com/brianway/s...

歡迎關(guān)注微信公眾號(hào)「不只Java」,后臺(tái)回復(fù)「電子書」,送說(shuō)不定有你想要的呢

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/72518.html

相關(guān)文章

  • Spring Boot [集成-MyBatis]

    摘要:通過(guò)配置文件通過(guò)配置導(dǎo)入指定的使用的方式屬性的同學(xué)也可以通過(guò)配置通過(guò)配置先配置文件使用的方式再配置注意中對(duì)象需要添加托管給方能正常使用。建議與任選其一,建議使用通過(guò)注解的方式使用,當(dāng)然如果習(xí)慣配置的方式也可以使用。 導(dǎo)讀: 在上篇文章中我們介紹了spring-data-jpa的一些常用方法,在這篇文章中我們?cè)诮榻B關(guān)于mybatis與Spring Boot 的集成,及一些常用方法 集成:...

    XBaron 評(píng)論0 收藏0
  • 北上廣深杭房?jī)r(jià)高壓下,這也許是程序員扎根的唯一出路...

    摘要:在不考慮通脹和工資增長(zhǎng)的情況下,除去吃喝需要攢年才能攢出一線城市房子的首付,以這樣的收入水平,基本上沒法扎根。 簡(jiǎn)單算一筆賬,目前小公司Java后端工資一般是1萬(wàn)出頭,年薪普遍在20萬(wàn)以下。在不考慮通脹和工資增長(zhǎng)的情況下,除去吃喝需要攢30年才能攢出一線城市房子的首付,以這樣的收入水平,基本...

    Pink 評(píng)論0 收藏0
  • 【轉(zhuǎn)自百度f(wàn)ex】fex-team/interview-questions

    摘要:注意目前發(fā)現(xiàn)有其他人以團(tuán)隊(duì)名義進(jìn)行招聘,發(fā)出的郵箱皆為私人郵箱。為防止在投遞簡(jiǎn)歷出現(xiàn)誤會(huì),在此提醒各位注意團(tuán)隊(duì)沒有以任何個(gè)人名義或郵箱進(jìn)行招聘。的面試過(guò)程我們一般會(huì)有輪面試,對(duì)于高級(jí)別的工程師可能會(huì)有輪面試。 fex-team/interview-questions 注意 目前發(fā)現(xiàn)有其他人以 FEX 團(tuán)隊(duì)名義進(jìn)行招聘,發(fā)出的郵箱皆為私人郵箱。 為防止在投遞簡(jiǎn)歷出現(xiàn)誤會(huì),在此提醒各位注意...

    468122151 評(píng)論0 收藏0
  • 【轉(zhuǎn)自百度f(wàn)ex】fex-team/interview-questions

    摘要:注意目前發(fā)現(xiàn)有其他人以團(tuán)隊(duì)名義進(jìn)行招聘,發(fā)出的郵箱皆為私人郵箱。為防止在投遞簡(jiǎn)歷出現(xiàn)誤會(huì),在此提醒各位注意團(tuán)隊(duì)沒有以任何個(gè)人名義或郵箱進(jìn)行招聘。的面試過(guò)程我們一般會(huì)有輪面試,對(duì)于高級(jí)別的工程師可能會(huì)有輪面試。 fex-team/interview-questions 注意 目前發(fā)現(xiàn)有其他人以 FEX 團(tuán)隊(duì)名義進(jìn)行招聘,發(fā)出的郵箱皆為私人郵箱。 為防止在投遞簡(jiǎn)歷出現(xiàn)誤會(huì),在此提醒各位注意...

    fou7 評(píng)論0 收藏0
  • 【轉(zhuǎn)自百度f(wàn)ex】fex-team/interview-questions

    摘要:注意目前發(fā)現(xiàn)有其他人以團(tuán)隊(duì)名義進(jìn)行招聘,發(fā)出的郵箱皆為私人郵箱。為防止在投遞簡(jiǎn)歷出現(xiàn)誤會(huì),在此提醒各位注意團(tuán)隊(duì)沒有以任何個(gè)人名義或郵箱進(jìn)行招聘。的面試過(guò)程我們一般會(huì)有輪面試,對(duì)于高級(jí)別的工程師可能會(huì)有輪面試。 fex-team/interview-questions 注意 目前發(fā)現(xiàn)有其他人以 FEX 團(tuán)隊(duì)名義進(jìn)行招聘,發(fā)出的郵箱皆為私人郵箱。 為防止在投遞簡(jiǎn)歷出現(xiàn)誤會(huì),在此提醒各位注意...

    aisuhua 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<