黄色网址大全免费-黄色网址你懂得-黄色网址你懂的-黄色网址有那些-免费超爽视频-免费大片黄国产在线观看

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

Mybatis映射原理

更新時間:2021-06-21 12:35:14 來源:動力節點 瀏覽1144次

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

當參數多于 1 個的時候,需要將所有參數放到一個 Map對象中 。 通過 Map 傳遞多個參數,使用起來很不方便,而且還無法避免很多重復的代碼。使用接口調用方式就會方便很多, MyBatis 使用 Java 的動態代理可以直接通過接口來調用相應的方法,不需要提供接口的實現類,更不需要在實現類中使用 SqlSess 工∞以通過命名空間間接調用 。 另外,當有多個參數的時候,通過參數注解@ Par am 設置參數的名字省去了 手動構造 Map 參數的過程,尤其在 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>根標簽的 name space 屬性。當 Mapper 接口和 XML 文件關聯的

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

應的 tk. mybatis . simple .mapper . UserMapper, MyBatis 內部就是通過這個值將接口和

XML 關聯起來的。

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 包下所有的接口,循環對接口進行如下操作。

1.判斷接口對應的命名 空 間是否己經存在,如果不存在就拋出異常,存在就繼續進行接下來的操作。

2.加載接口對應的卻也映射文件 , 將接口全限定名轉換為路徑 , 例如 , 將接口

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

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

為什么 Mapper 接口沒有實現類卻能被正常調用呢?

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

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

提交申請后,顧問老師會電話與您溝通安排學習

免費課程推薦 >>
技術文檔推薦 >>
主站蜘蛛池模板: 免费观看性欧美一级 | 91视频第一页 | 欧美一区二三区 | 欧美成人午夜剧场 | 韩国一区二区三区 | 日本成人激情视频 | 成年人黄视频 | 青青青在线视频播放 | 中国特级黄一级真人毛片 | 最新的国产成人精品2022 | 免费国产不卡午夜福在线观看 | 天天操一操 | 在线日本三级 | 国产精品免费入口视频 | 久久午夜羞羞影院免费观看 | 一本大道香蕉大在线最新 | 免费黄色国产视频 | 77久久| 欧美一区二区三区在观看 | 色黄视频网站 | 偷偷狠狠的日日高清完整视频 | 天天做天天爽爽快快 | 久久免费精品高清麻豆 | 中文字幕有码在线播放 | 亚洲精品456在在线播放 | 久久国产一级毛片一区二区 | 欧美一级特黄啪啪片免费看 | 国产区一区二区三区 | 九九热精品免费视频 | 日韩一级高清 | 噜噜色综合 | 亚洲一区二区三区国产精品 | 日本伊人网 | 一级乱理中文字幕韩国 | 国产一级一片免费播放视频 | 欧美人猛交日本人xxx | 欧美性一级交视频 | 成人满18在线观看网站免费 | 欧美成人私人视频88在线观看 | 亚欧日韩毛片在线看免费网站 | 好男人www社区资源在线观看 |