Mybatis中傳遞多個(gè)參數(shù)的4種方法總結(jié)

前言

創(chuàng)新互聯(lián)建站致力于互聯(lián)網(wǎng)網(wǎng)站建設(shè)與網(wǎng)站營(yíng)銷(xiāo),提供做網(wǎng)站、成都網(wǎng)站建設(shè)、網(wǎng)站開(kāi)發(fā)、seo優(yōu)化、網(wǎng)站排名、互聯(lián)網(wǎng)營(yíng)銷(xiāo)、微信平臺(tái)小程序開(kāi)發(fā)、公眾號(hào)商城、等建站開(kāi)發(fā),創(chuàng)新互聯(lián)建站網(wǎng)站建設(shè)策劃專(zhuān)家,為不同類(lèi)型的客戶提供良好的互聯(lián)網(wǎng)應(yīng)用定制解決方案,幫助客戶在新的全球化互聯(lián)網(wǎng)環(huán)境中保持優(yōu)勢(shì)。

現(xiàn)在大多項(xiàng)目都是使用Mybatis了,但也有些公司使用Hibernate。使用Mybatis最大的特性就是sql需要自己寫(xiě),而寫(xiě)sql就需要傳遞多個(gè)參數(shù)。面對(duì)各種復(fù)雜的業(yè)務(wù)場(chǎng)景,傳遞參數(shù)也是一種學(xué)問(wèn)。

Mybatis中傳遞多個(gè)參數(shù)的4種方法總結(jié)

下面給大家總結(jié)了以下幾種多參數(shù)傳遞的方法。

方法1:順序傳參法

Mybatis中傳遞多個(gè)參數(shù)的4種方法總結(jié)

#{}里面的數(shù)字代表你傳入?yún)?shù)的順序。

這種方法不建議使用,sql層表達(dá)不直觀,且一旦順序調(diào)整容易出錯(cuò)。

方法2:@Param注解傳參法

Mybatis中傳遞多個(gè)參數(shù)的4種方法總結(jié)

#{}里面的名稱對(duì)應(yīng)的是注解 @Param括號(hào)里面修飾的名稱。

這種方法在參數(shù)不多的情況還是比較直觀的,推薦使用。

方法3:Map傳參法

Mybatis中傳遞多個(gè)參數(shù)的4種方法總結(jié)

#{}里面的名稱對(duì)應(yīng)的是 Map里面的key名稱。

這種方法適合傳遞多個(gè)參數(shù),且參數(shù)易變能靈活傳遞的情況。

方法4:Java Bean傳參法

Mybatis中傳遞多個(gè)參數(shù)的4種方法總結(jié)

#{}里面的名稱對(duì)應(yīng)的是 User類(lèi)里面的成員屬性。

這種方法很直觀,但需要建一個(gè)實(shí)體類(lèi),擴(kuò)展不容易,需要加屬性,看情況使用。

使用Mapper接口時(shí)參數(shù)傳遞方式

Mybatis在使用Mapper接口進(jìn)行編程時(shí),其實(shí)底層是采用了動(dòng)態(tài)代理機(jī)制,表面上是調(diào)用的Mapper接口,而實(shí)際上是通過(guò)動(dòng)態(tài)代理調(diào)用的SqlSession的對(duì)應(yīng)方法,如selectOne(),有興趣的朋友可以查看DefaultSqlSession的getMapper()方法實(shí)現(xiàn),其最終會(huì)獲得一個(gè)代理了Mapper接口的MapperProxy對(duì)象。MapperProxy對(duì)象在調(diào)用Mapper接口方法時(shí)會(huì)把傳遞的參數(shù)做一個(gè)轉(zhuǎn)換,然后把轉(zhuǎn)換后的參數(shù)作為入?yún)⒄{(diào)用SqlSession對(duì)應(yīng)的操作方法(如selectOne、insert等)。轉(zhuǎn)換過(guò)程可以參考MapperMethod的execute()方法實(shí)現(xiàn)。簡(jiǎn)單來(lái)說(shuō)是以下規(guī)則:

1、如果傳遞過(guò)來(lái)是單參數(shù),且沒(méi)有以@Param注解進(jìn)行命名,則直接將單參數(shù)作為真實(shí)的參數(shù)調(diào)用SqlSession的對(duì)應(yīng)方法。

2、如果傳遞過(guò)來(lái)的不是單參數(shù)或者是包含以@Param注解進(jìn)行命名的參數(shù),則會(huì)將對(duì)應(yīng)的參數(shù)轉(zhuǎn)換為一個(gè)Map進(jìn)行傳遞。具體規(guī)則如下:

      2.1、 會(huì)把對(duì)應(yīng)的參數(shù)按照順序以param1、param2、paramN這樣的形式作為Key存入目標(biāo)Map中,第一個(gè)參數(shù)是param1,第N個(gè)參數(shù)是paramN。

      2.2、 如果參數(shù)是以@Param注解命名的參數(shù),則以@Param指定的名稱作為Key存入目標(biāo)Map中。

      2.3、 如果參數(shù)不是以@Param注解命名的,則按照順序以0、1、N這樣的形式作為Key存入目標(biāo)Map中,第一個(gè)參數(shù)是0,第N個(gè)參數(shù)是N。

總結(jié)

以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,如果有疑問(wèn)大家可以留言交流,謝謝大家對(duì)創(chuàng)新互聯(lián)的支持。

當(dāng)前名稱:Mybatis中傳遞多個(gè)參數(shù)的4種方法總結(jié)
當(dāng)前URL:http://muchs.cn/article20/jpecco.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供移動(dòng)網(wǎng)站建設(shè)、網(wǎng)站建設(shè)標(biāo)簽優(yōu)化、建站公司、網(wǎng)站策劃、企業(yè)網(wǎng)站制作

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

成都seo排名網(wǎng)站優(yōu)化