大战熟女丰满人妻av-荡女精品导航-岛国aaaa级午夜福利片-岛国av动作片在线观看-岛国av无码免费无禁网站-岛国大片激情做爰视频

專注Java教育14年 全國咨詢/投訴熱線:400-8080-105
動力節(jié)點(diǎn)LOGO圖
始于2009,口口相傳的Java黃埔軍校
首頁 hot資訊 Mybatis映射原理

Mybatis映射原理

更新時間:2021-06-21 12:35:14 來源:動力節(jié)點(diǎn) 瀏覽1169次

MyBatis 的真正強(qiáng)大之處在于它的映射語句,這也是它的魔力所在。由于它的映射語句異常強(qiáng)大,映射器的 XML 文件就顯得相對簡單。MyBatis 3.0 相比 2.0 版本的一個最大變化,就是支持使用接口來調(diào)用方法。以前使用 SqlSession 通過命名空間調(diào)用 MyBatis 方法時,首先需要用到命名空間和方法id 組成的字符串來調(diào)用相應(yīng)的方法 。

當(dāng)參數(shù)多于 1 個的時候,需要將所有參數(shù)放到一個 Map對象中 。 通過 Map 傳遞多個參數(shù),使用起來很不方便,而且還無法避免很多重復(fù)的代碼。使用接口調(diào)用方式就會方便很多, MyBatis 使用 Java 的動態(tài)代理可以直接通過接口來調(diào)用相應(yīng)的方法,不需要提供接口的實(shí)現(xiàn)類,更不需要在實(shí)現(xiàn)類中使用 SqlSess 工∞以通過命名空間間接調(diào)用 。 另外,當(dāng)有多個參數(shù)的時候,通過參數(shù)注解@ Par am 設(shè)置參數(shù)的名字省去了 手動構(gòu)造 Map 參數(shù)的過程,尤其在 Spring 中使用的時候,可以配置為自動掃描所有的接口類 ,直接將接口注入需要用到的地方。

mapper文件示例:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.cnpiec.ireader.dao.GetBookDataDao">
    <insert id="batchInsertBook" parameterType="Book">
        INSERT INTO BOOK (BOOKID,NAME,PARTNERNAME) VALUES
        <foreach collection="list" item="book" separator=",">
            (#{book.bookId}, #{book.name}, #{book.partnerName})
        </foreach>
    </insert>
</mapper>

需要注意的是<mapper>根標(biāo)簽的 name space 屬性。當(dāng) Mapper 接口和 XML 文件關(guān)聯(lián)的

時候,命名空間口amespace 的值就需要配置成接口的全限定名稱,例如 UserMapper 接口對

應(yīng)的 tk. mybatis . simple .mapper . UserMapper, MyBatis 內(nèi)部就是通過這個值將接口和

XML 關(guān)聯(lián)起來的。

mybati s-config.xml 配置文件中的 mappers 元素中配置所有的 mapper ,部分配置代碼如下 。

<mappers>
    <mapper resource=” tk/mybatis/simple/mapper/CountryMapper.xml ” / >
    <mapper resource=” tk/mybatis/simple/mapper/UserMapper . xml ” / >
    <mapper resource=” tk/mybatis/simple/mapper/RoleMapper.xml ” />
    <mapper resource=” tk/mybatis/simple/mapper/PrivilegeMapper . xml ” />
    <mapper resource=” tk/mybatis/simple/mapper/UserRoleMapper . xml ” />
    <mapper resource=” tk/mybatis/simple/mapper / RolePrivilegeMapper.xml ” />
</mappers>

更簡單的配置方式,代碼如下

<mappers>
    <package name= ” tk.mybatis . simple . mapper ” />
</mappers>

這種配置方式會先查找 tk.mybatis.simple . mapper 包下所有的接口,循環(huán)對接口進(jìn)行如下操作。

1.判斷接口對應(yīng)的命名 空 間是否己經(jīng)存在,如果不存在就拋出異常,存在就繼續(xù)進(jìn)行接下來的操作。

2.加載接口對應(yīng)的卻也映射文件 , 將接口全限定名轉(zhuǎn)換為路徑 , 例如 , 將接口

tk.mybatis.simple.mapper.UserMapper 轉(zhuǎn)換為 tk/mybati s/simple/mapper/UserMapper.xml,搜索以.xml 為后綴搜索 XML 資源,如果找到就解析 XML 。

3.處理接口中的注解方法。

為什么 Mapper 接口沒有實(shí)現(xiàn)類卻能被正常調(diào)用呢?

這是因為 MyBaits 在 Mapper 接口上使用了動態(tài)代理的一種非常規(guī)的用法,熟悉這種動態(tài)代理的用法不僅有利于理解 MyBatis 接口和 XML 的關(guān)系,還能開闊思路 。從代理類中可以看到,當(dāng)調(diào)用 一個接口的方法時,會先通過接口的全限定名稱和當(dāng)前調(diào)用的方法名的組合得到一個方法 id,這個 id 的值就是映射 XML 中口arnespa ce 和具體方法 id的組合。所以可以在代理方法中使用 sqlSession 以命名空間的方式調(diào)用方法。通過這種方式可以將接口和 XML 文件中的方法關(guān)聯(lián)起來。這種代理方式和常規(guī)代理的不同之處在于,這里沒有對某個具體類進(jìn)行代理,而是通過代理轉(zhuǎn)化成了對其他代碼的調(diào)用。由于方法參數(shù)和返回值存在很多種情況,因此 MyBatis 的內(nèi)部實(shí)現(xiàn)會比上面的邏輯復(fù)雜得多,正是因為 MyBatis 對接口動態(tài)代理的實(shí)現(xiàn),我們在使用接口方式的時候才會如此容易。如果大家對 MyBatis 源碼感興趣,可以通過第 11 章的內(nèi)容了解 MyBatis 的源碼并深入學(xué)習(xí)。通過本節(jié)這個簡單的例子,我們可以了解 MyBatis 動態(tài)代理實(shí)現(xiàn)的方式,同時也學(xué)會一種編程思路:可以通過動態(tài)代理這個橋梁將對接口方法的調(diào)用轉(zhuǎn)換為對其他方法的調(diào)用 。

以上就是動力節(jié)點(diǎn)小編介紹的"Mybatis映射原理",希望對大家有幫助,如有疑問,請在線咨詢,有專業(yè)老師隨時為您服務(wù)。

提交申請后,顧問老師會電話與您溝通安排學(xué)習(xí)

免費(fèi)課程推薦 >>
技術(shù)文檔推薦 >>
主站蜘蛛池模板: 日韩精品久久不卡中文字幕 | 四虎精品在线视频 | 亚洲黄色免费在线观看 | 人人揉揉香蕉大免费不卡 | 91精选国产 | 福利视频免费看 | 中文字幕欧美日韩久久 | 特级一级毛片视频免费观看 | 日本一级免费 | 久久99精品久久久久久臀蜜桃 | 99精品欧美一区 | 国产成人91高清精品免费 | 成人午夜性a一级毛片美女 成人午夜性视频欧美成人 成人午夜亚洲影视在线观看 | 日韩 亚洲 欧美 中文 高清 | 亚洲一区二区三区在线网站 | 国产精品久久久久久久免费大片 | 黄色毛片免费看 | 亚洲欧美日韩一区 | 国产高清ujzzujzz | 欧美成人交tv免费观看 | 天天成人 | 日本一级毛片毛片一级毛片 | 国产成人久久精品一区二区三区 | 看一级毛片一区二区三区免费 | 欧美亚洲国产一区二区三区 | 亚洲高清毛片 | 五月天婷婷免费视频 | 国产精品二区高清在线 | 日本aⅴ在线不卡免费观看 日本aaaa | 视频播放在线观看精品视频 | 2020久久精品国产免费 | 日日摸夜夜添夜夜添欧美毛片 | 另类久久 | 有色视频在线观看免费高清 | 九九伦理影院手机观看 | 免费精品国产自产拍在 | 91在线视频免费播放 | 久久精品国产亚洲网站 | 国产凹凸在线一区二区色老头 | 亚洲一区二区三区日本久久九 | 天天干在线影院 |