MyBatis學習筆記

MyBatis

原生jdbc存在問題

1.數(shù)據(jù)庫連接吠架,使用時就創(chuàng)建怀薛,不使用立即釋放落萎,對數(shù)據(jù)庫進行頻繁的連接開啟和關閉悯许,造成數(shù)據(jù)庫資源浪費仆嗦,影響數(shù)據(jù)庫性能

解決------使用數(shù)據(jù)庫連接池管理數(shù)據(jù)庫連接。

2.將sql語句硬編碼到Java代碼中先壕,如果sql語句修改瘩扼,需要重新編譯Java代碼,不利于系統(tǒng)的維護垃僚。

解決------將sql語句配置在xml文件中集绰。

3.向preparedStatement(可以防止sql注入)中設置參數(shù),對占位符位置和設置參數(shù)值谆棺,硬編碼栽燕,不利于系統(tǒng)維護。

解決------將sql語句配置在xml文件中改淑。

4.從resultSet中遍歷結果集數(shù)據(jù)時碍岔,存在硬編碼,將獲取表的字段進行硬編碼朵夏,不利于系統(tǒng)維護蔼啦。

解決------將查詢的結果集,自動映射成Java對象侍郭。







#{}和${}

#{}表示一個占位符號询吴,#{}接收輸入?yún)?shù)掠河,類型可以是簡單類型亮元,pojo、hashmap唠摹。

如果接收簡單類型爆捞,#{}中可以寫成value或其它名稱。

#{}接收pojo對象值勾拉,通過OGNL讀取對象中的屬性值煮甥,通過屬性.屬性.屬性...的方式獲取對象屬性值。

${}表示一個拼接符號藕赞,會引用sql注入成肘,所以不建議使用${}。

${}接收輸入?yún)?shù)斧蜕,類型可以是簡單類型双霍,pojo、hashmap。

如果接收簡單類型洒闸,${}中只能寫成value染坯。

${}接收pojo對象值,通過OGNL讀取對象中的屬性值丘逸,通過屬性.屬性.屬性...的方式獲取對象屬性值单鹿。


mapper代理開發(fā)規(guī)范

編寫mapper.xml映射文件

編寫mapper接口需要遵循一些開發(fā)規(guī)范,mybatis可以自動生成mapper接口實現(xiàn)類代理對象深纲。

開發(fā)規(guī)范:

1仲锄、在mapper.xml中namespace等于mapper接口地址

2、mapper.java接口中的方法名和mapper.xml中statement的id一致

3囤萤、mapper.java接口中的方法輸入?yún)?shù)類型和mapper.xml中statement的parameterType指定的類型一致昼窗。

4、mapper.java接口中的方法返回值類型和mapper.xml中statement的resultType指定的類型一致涛舍。


mapper接口方法參數(shù)只能有一個是否影響系統(tǒng)開發(fā)

系統(tǒng)框架中澄惊,dao層的代碼是被業(yè)務層公用的。

即使mapper接口只有一個參數(shù)富雅,可以使用包裝類型的pojo滿足不同的業(yè)務方法的需求掸驱。

注意:持久層方法的參數(shù)可以包裝類型、map没佑。毕贼。。蛤奢,service方法中建議不要使用包裝類型(不利于業(yè)務層的可擴展)鬼癣。



resultMap 一對一

<resultMap id="OrdersUserResultMap" type="com.exam.examsystem.domain.Orders">

column:訂單信息的唯一標識的列

property:訂單信息的唯一標識列所映射到Orders中的對應屬性-->

? ? <id column="id" property="id" />

<result column="userid" property="userId" />

<result column="number" property="number" />

association:用于映射關聯(lián)查詢單個對象的信息

javaType:將要關聯(lián)查詢的用戶信息映射到Orders中的對應屬性-->

? ? <association property="user" javaType="com.exam.examsystem.domain.User">

column:用戶信息的唯一標識的列

property:用戶信息的唯一標識列所映射到User中的對應屬性-->

? ? ? ? <id column="id" property="id" />

<result column="username" property="userName" />

<result column="sex" property="sex" />

</association>

</resultMap>

resultMap 一對多

<resultMap id="UserRoleResultMap" type="com.exam.examsystem.domain.User">

? ? ? ? <id column="id" property="id" />

? ? ? ? <result column="user_name" property="userName" />

? ? ? ? <result column="sex" property="sex" />

? ? ? ? <!--配置一對多 -->

? ? ? ? <collection property="roles" ofType="com.exam.examsystem.domain.Role">

? ? ? ? ? ? <id column="role_id" property="id" />

? ? ? ? ? ? <result column="role_name" property="roleName" />

? ? ? ? </collection>

? ? </resultMap>



resultMap總結

resultType:

作用:

將查詢結果按照sql列名pojo屬性名一致性映射到pojo中。

場合:

常見一些明細記錄的展示啤贩,比如用戶購買商品明細待秃,將關聯(lián)查詢信息全部展示在頁面時,此時可直接使用resultType將每一條記錄映射到pojo中痹屹,在前端頁面遍歷list(list中是pojo)即可章郁。

resultMap:

使用association和collection完成一對一和一對多高級映射(對結果有特殊的映射要求)。

association:

作用:

將關聯(lián)查詢信息映射到一個pojo對象中志衍。

場合:

為了方便查詢關聯(lián)信息可以使用association將關聯(lián)訂單信息映射為用戶對象的pojo屬性中暖庄,比如:查詢訂單及關聯(lián)用戶信息。

使用resultType無法將查詢結果映射到pojo對象的pojo屬性中楼肪,根據(jù)對結果集查詢遍歷的需要選擇使用resultType還是resultMap培廓。

collection:

作用:

將關聯(lián)查詢信息映射到一個list集合中。

場合:

為了方便查詢遍歷關聯(lián)信息可以使用collection將關聯(lián)信息映射到list集合中春叫,比如:查詢用戶權限范圍模塊及模塊下的菜單肩钠,可使用collection將模塊映射到模塊list中俘侠,將菜單列表映射到模塊對象的菜單list屬性中,這樣的作的目的也是方便對查詢結果集進行遍歷查詢蔬将。

如果使用resultType無法將查詢結果映射到list集合中爷速。



















1.映射文件:xxxMapper.xml

配置sql語句

<mapper namespace="test">? ? ? ? 輸入? ? ? ? ? ? ? ? ? 輸出

<select id = "findUserById" parameterType = "int" resultType="類的全限定名">

select * from USER where i =#{id}

</select>

</mapper>

2.SqlMapConfig.xml中加載xxxMapper.xml

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市霞怀,隨后出現(xiàn)的幾起案子惫东,更是在濱河造成了極大的恐慌,老刑警劉巖毙石,帶你破解...
    沈念sama閱讀 217,826評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件廉沮,死亡現(xiàn)場離奇詭異,居然都是意外死亡徐矩,警方通過查閱死者的電腦和手機滞时,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,968評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來滤灯,“玉大人坪稽,你說我怎么就攤上這事×壑瑁” “怎么了窒百?”我有些...
    開封第一講書人閱讀 164,234評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長豫尽。 經(jīng)常有香客問我篙梢,道長,這世上最難降的妖魔是什么美旧? 我笑而不...
    開封第一講書人閱讀 58,562評論 1 293
  • 正文 為了忘掉前任渤滞,我火速辦了婚禮,結果婚禮上榴嗅,老公的妹妹穿的比我還像新娘妄呕。我一直安慰自己,他們只是感情好录肯,可當我...
    茶點故事閱讀 67,611評論 6 392
  • 文/花漫 我一把揭開白布趴腋。 她就那樣靜靜地躺著吊说,像睡著了一般论咏。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上颁井,一...
    開封第一講書人閱讀 51,482評論 1 302
  • 那天厅贪,我揣著相機與錄音,去河邊找鬼雅宾。 笑死养涮,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播贯吓,決...
    沈念sama閱讀 40,271評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼懈凹,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了悄谐?” 一聲冷哼從身側響起介评,我...
    開封第一講書人閱讀 39,166評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎爬舰,沒想到半個月后们陆,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,608評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡情屹,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,814評論 3 336
  • 正文 我和宋清朗相戀三年坪仇,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片垃你。...
    茶點故事閱讀 39,926評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡椅文,死狀恐怖,靈堂內的尸體忽然破棺而出惜颇,到底是詐尸還是另有隱情雾袱,我是刑警寧澤,帶...
    沈念sama閱讀 35,644評論 5 346
  • 正文 年R本政府宣布官还,位于F島的核電站芹橡,受9級特大地震影響,放射性物質發(fā)生泄漏望伦。R本人自食惡果不足惜林说,卻給世界環(huán)境...
    茶點故事閱讀 41,249評論 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望屯伞。 院中可真熱鬧腿箩,春花似錦、人聲如沸劣摇。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,866評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽末融。三九已至钧惧,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間勾习,已是汗流浹背浓瞪。 一陣腳步聲響...
    開封第一講書人閱讀 32,991評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留巧婶,地道東北人乾颁。 一個月前我還...
    沈念sama閱讀 48,063評論 3 370
  • 正文 我出身青樓涂乌,卻偏偏與公主長得像,于是被迫代替她去往敵國和親英岭。 傳聞我的和親對象是個殘疾皇子湾盒,可洞房花燭夜當晚...
    茶點故事閱讀 44,871評論 2 354

推薦閱讀更多精彩內容

  • 最近學習MyBatis這個輕量型持久層框架,感覺入門很簡單诅妹,但是深層次細節(jié)配置很多历涝。本篇筆記從 配置文件->例子入...
    Super超人閱讀 649評論 0 1
  • 《小吳同學的Mybatis學習之路》點擊此處查看完整項目 1.Mybatis_01_HelloWorld接口式編程...
    吳里慶慶閱讀 331評論 0 0
  • 1. 簡介 1.1 什么是 MyBatis ? MyBatis 是支持定制化 SQL漾唉、存儲過程以及高級映射的優(yōu)秀的...
    笨鳥慢飛閱讀 5,520評論 0 4
  • 《深入淺出MyBatis技術原理與實戰(zhàn)》2016年版本 讀書筆記 第一章 MyBatis簡介 1.ORM模型:對象...
    GunnerAha閱讀 550評論 0 3
  • 1.1mybatis下載 mybaits 的代碼由github.com 管理荧库,地址:https://github....
    暖熊熊閱讀 859評論 0 5