摘要:當(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ǔ)句
比如:name 字段。
解決方法:在列名兩邊加上兩個(gè) ` 即可,如下:
DELETE FROM stu WHERE name LIKE "%${name}%"
那么為什么會(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
該接口方法對(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ò)配置文件通過(guò)配置導(dǎo)入指定的使用的方式屬性的同學(xué)也可以通過(guò)配置通過(guò)配置先配置文件使用的方式再配置注意中對(duì)象需要添加托管給方能正常使用。建議與任選其一,建議使用通過(guò)注解的方式使用,當(dāng)然如果習(xí)慣配置的方式也可以使用。 導(dǎo)讀: 在上篇文章中我們介紹了spring-data-jpa的一些常用方法,在這篇文章中我們?cè)诮榻B關(guān)于mybatis與Spring Boot 的集成,及一些常用方法 集成:...
摘要:在不考慮通脹和工資增長(zhǎng)的情況下,除去吃喝需要攢年才能攢出一線城市房子的首付,以這樣的收入水平,基本上沒法扎根。 簡(jiǎn)單算一筆賬,目前小公司Java后端工資一般是1萬(wàn)出頭,年薪普遍在20萬(wàn)以下。在不考慮通脹和工資增長(zhǎng)的情況下,除去吃喝需要攢30年才能攢出一線城市房子的首付,以這樣的收入水平,基本...
摘要:注意目前發(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ì),在此提醒各位注意...
摘要:注意目前發(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ì),在此提醒各位注意...
摘要:注意目前發(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ì),在此提醒各位注意...
閱讀 3094·2023-04-26 00:53
閱讀 3546·2021-11-19 09:58
閱讀 1706·2021-09-29 09:35
閱讀 3311·2021-09-28 09:46
閱讀 3877·2021-09-22 15:38
閱讀 2701·2019-08-30 15:55
閱讀 3022·2019-08-23 14:10
閱讀 3839·2019-08-22 18:17