MyBatis參數(shù)問題

參數(shù)的類型可以分為兩種:
一種是基本類型,另 一種是 JavaBean 渠抹。
當(dāng)參數(shù)是一個(gè)基本類型的時(shí)候蝙昙,它在 XML 文件中對應(yīng)的 SQL 語句只會使用 一個(gè)參數(shù),例
如 delete 方法梧却。當(dāng)參數(shù)是一個(gè) JavaBean 類型的時(shí)候奇颠,它在 XML 文件中對應(yīng)的 SQL 語句會有
多個(gè)參數(shù),例如 insert 放航、 update 方法 烈拒。
在實(shí)際應(yīng)用中經(jīng)常會遇到使用多個(gè)參數(shù)的情況 。 前面幾節(jié)的例子中广鳍,我們將多個(gè)參數(shù)合并
到一個(gè) JavaBean 中荆几,并使用這個(gè) JavaBean 作為接口方法的參數(shù)。這種方法用起來很方便赊时,但
并不適合全部的情況吨铸,因?yàn)椴荒苤粸榱藘扇齻€(gè)參數(shù)去創(chuàng)建新的 JavaBean 類,因此對于參數(shù)比較
少的情況 祖秒,還有兩種方式可以采用:

  • 使用 Map 類型作為參數(shù)
  • 使用@ Param 注解诞吱。

使用 Map 類型作為參數(shù)的方法舟奠,就是在 Map 中通過 key 來映射 XML 中 SQL 使用的參數(shù)
值名字, value 用來存放參數(shù)值房维,需要多個(gè)參數(shù)時(shí)沼瘫,通過 Map 的 key-va lue 方式傳遞參數(shù)值 ,由
于這種方式還需要自己手動創(chuàng)建 Map 以及對參數(shù)進(jìn)行賦值握巢,其實(shí)并不簡潔晕鹊,所以對這種方式只
做以上簡單介紹,接下來著重講解使用@ Param 注解的方式暴浦。
先來看一下 溅话,如果在接口中使用多個(gè)參數(shù)但不使用@ Param 注解會發(fā)生什么錯(cuò)誤

org.apache.ibatis.binding.BindingException:
Parameter ’userId ’ not found.
Available parameters are [0, 1, param1, param2]

這個(gè)錯(cuò)誤表示 , XML 可用的參數(shù)只有 0 歌焦、 1 飞几、 param1, param2 ,沒有 userid
paraml 和 param2 都是 MyBatis 根據(jù)參數(shù)位置自定義的名字独撇,這時(shí)如果將 XML 中的#{userId}
改為#{0}或#{param1} 屑墨, 將#{enabled}改為#{1}或#{param2 },這個(gè)方法就可以被正常調(diào)
用了纷铣。這樣講只是為了讓大家理解它們之間的關(guān)系卵史,但實(shí)際上并不建議這么做 。
而建議使用@Param注解

List<SysRole> selectRo lesByUseridAndRoleEnabled(  @Param (”userId”) Long userId,@Param (”enabled ”) Integer enabled);

給參數(shù)配直@ Param 注解后搜立, MyBatis 就會自動將參數(shù)封裝成 Map 類型以躯,@ Param 注解值
會作為 Map 中的 key,因此在 SQL 部分就可以通過配置的注解值來使用參數(shù)啄踊。
到這里大家可能會有一個(gè)疑問:當(dāng)只有一個(gè)參數(shù)(基本類型或擁有 Type Handler 配置的
類型)的時(shí)候忧设,為什么可以不使用注解?這是因?yàn)樵谶@種情況下(除集合和數(shù)組外) 颠通, MyBatis
不關(guān)心這個(gè)參數(shù)叫什么名字就會直接把這個(gè)唯一的參數(shù)值拿來使用址晕。

以上是參數(shù)類型比較簡單時(shí)使用@Param 注解的例子 , 當(dāng)參數(shù)類型是一些 JavaBean 的時(shí)候顿锰,
用法略有不同 將接口方法中的參數(shù)換成 JavaBean 類型谨垃,代碼如下 。

List<SysRole> selectRolesByUserAndRole(
    @Param (” user ”) SysUser user,
    @Param (” role ”) SysRole role);

這時(shí)撵儿,在 XML 中就不能直接使用#{userId}和#{enabled}了乘客,而是要通過點(diǎn)取值方式
使用#{user.id}和#{role.enabled}從兩個(gè) JavaBean 中取出指定屬性的值 。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末淀歇,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子匈织,更是在濱河造成了極大的恐慌浪默,老刑警劉巖牡直,帶你破解...
    沈念sama閱讀 211,042評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異纳决,居然都是意外死亡碰逸,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,996評論 2 384
  • 文/潘曉璐 我一進(jìn)店門阔加,熙熙樓的掌柜王于貴愁眉苦臉地迎上來饵史,“玉大人,你說我怎么就攤上這事胜榔「炫纾” “怎么了?”我有些...
    開封第一講書人閱讀 156,674評論 0 345
  • 文/不壞的土叔 我叫張陵夭织,是天一觀的道長吭露。 經(jīng)常有香客問我,道長尊惰,這世上最難降的妖魔是什么讲竿? 我笑而不...
    開封第一講書人閱讀 56,340評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮弄屡,結(jié)果婚禮上题禀,老公的妹妹穿的比我還像新娘。我一直安慰自己膀捷,他們只是感情好迈嘹,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,404評論 5 384
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著担孔,像睡著了一般江锨。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上糕篇,一...
    開封第一講書人閱讀 49,749評論 1 289
  • 那天啄育,我揣著相機(jī)與錄音,去河邊找鬼拌消。 笑死挑豌,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的墩崩。 我是一名探鬼主播氓英,決...
    沈念sama閱讀 38,902評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼鹦筹!你這毒婦竟也來了铝阐?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,662評論 0 266
  • 序言:老撾萬榮一對情侶失蹤铐拐,失蹤者是張志新(化名)和其女友劉穎徘键,沒想到半個(gè)月后练对,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,110評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡吹害,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,451評論 2 325
  • 正文 我和宋清朗相戀三年螟凭,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片它呀。...
    茶點(diǎn)故事閱讀 38,577評論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡螺男,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出纵穿,到底是詐尸還是另有隱情下隧,我是刑警寧澤,帶...
    沈念sama閱讀 34,258評論 4 328
  • 正文 年R本政府宣布政恍,位于F島的核電站汪拥,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏篙耗。R本人自食惡果不足惜迫筑,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,848評論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望宗弯。 院中可真熱鬧脯燃,春花似錦、人聲如沸蒙保。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,726評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽邓厕。三九已至逝嚎,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間详恼,已是汗流浹背补君。 一陣腳步聲響...
    開封第一講書人閱讀 31,952評論 1 264
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留昧互,地道東北人挽铁。 一個(gè)月前我還...
    沈念sama閱讀 46,271評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像敞掘,于是被迫代替她去往敵國和親叽掘。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,452評論 2 348

推薦閱讀更多精彩內(nèi)容