MyBatis學(xué)習(xí)筆記

MyBatis

原生jdbc存在問題

1.數(shù)據(jù)庫連接,使用時就創(chuàng)建,不使用立即釋放,對數(shù)據(jù)庫進行頻繁的連接開啟和關(guān)閉,造成數(shù)據(jù)庫資源浪費,影響數(shù)據(jù)庫性能

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

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

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

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

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

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

解決------將查詢的結(jié)果集,自動映射成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è)務(wù)層公用的。

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

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



resultMap 一對一

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

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

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

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

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

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

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

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

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

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

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

? ? ? ? <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總結(jié)

resultType:

作用:

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

場合:

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

resultMap:

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

association:

作用:

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

場合:

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

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

collection:

作用:

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

場合:

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

如果使用resultType無法將查詢結(jié)果映射到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

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

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

友情鏈接更多精彩內(nèi)容