Mybatis源碼之與Spring集成包

這次講講Mybatis與Spring的整合,作為兩款優秀的開源框架,被大眾廣泛使用,自然是需要強強聯合的。

使用示例

先看一下怎么使用,首先需要引用這兩款框架的jar包:

<dependency>//spring-webmvc會自動去引入其他Spring的核心包<groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><version>${spring.version}</version>
</dependency>
<dependency><groupId>org.springframework</groupId><artifactId>spring-jdbc</artifactId><version>${spring.version}</version>
</dependency>
<dependency><groupId>org.springframework</groupId><artifactId>spring-jcl</artifactId><version>${spring.version}</version>
</dependency>
<dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.5.6</version>
</dependency>
<dependency>//集成包,是Mybatis和Spring的中間橋梁<groupId>org.mybatis</groupId><artifactId>mybatis-spring</artifactId><version>1.3.2</version>
</dependency>

在Spring的配置文件中需引入集成包的兩個類:

org.mybatis.spring.SqlSessionFactoryBean:將Mybatis的SqlSessionFactory注入到Spring的IOC容器中;

org.mybatis.spring.mapper.MapperScannerConfigurer:配置Mybatis接口以及Spring容器中的SqlSessionFactory引用;

配置示例:

<bean id="sqlSessionFactoryBean" class="org.mybatis.spring.SqlSessionFactoryBean">//配置數據源的引用<property name="dataSource" ref="dataSource"></property>//配置Mybatis對的配置所在類路徑(可不配)<property name="configLocation" value="classpath:mybatis-config.xml"></property>//配置Mapper文件所在位置<property name="mapperLocations"><list><value>classpath:com/test/mybatis/dao/*.xml</value></list></property>
</bean>	<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">//配置DAO層接口所在位置,多個DAO路徑可用,隔開<property name="basePackage" value="com.test.mybatis.dao"></property>//配置SqlSessionFactoryBean引用名稱<property name="sqlSessionFactoryBeanName" value="sqlSessionFactoryBean"></property>
</bean>

源碼分析

Spring集成了Mybatis之后Mybatis的配置文件中的標簽配置基本可以不需要配置,都可以在Spring中的配置;

先談談這兩個類:

SqlSessionFactoryBean

Mybatis中任何屬性均在在這個類中可配置:

我們可以發現這個實現了三個接口:

FactoryBean<SqlSessionFactory>:Spring中Bean存在的一種形式;

InitializingBean:Bean的初始化方法;

ApplicationListener<ApplicationEvent>:Spring IOC容器監聽方法,分別在容器創建、關閉、刷新、停止時執行;

Bean的初始化方法:

在buildSqlSessionFactory方法中就是將Mybatis的流程加載一遍。

容器的監聽方法:

MapperScannerConfigurer

該類實現了:

BeanDefinitionRegistryPostProcessor:?BeanDefinitionRegistry的后置處理器,即在Spring容器創建時加載,可以修改Bean一些相關的信息;

InitializingBean:Bean的初始化方法:

ApplicationContextAware:上下文接口的Aware接口,可將容器中上下文對象開放;

BeanNameAware:Bean名稱Aware接口,可以修改Bean的名稱;

重點談一下以下兩個方法:

過濾器,在Spring當中能夠指定過濾某些類或注解等等,在之前的Spring的文章好像沒有談到,那就下次在說吧:

在掃描的方法中,會將掃描接口的一些Bean的屬性進行改變:

到了這里會發現將所有的接口Bean中的Class替換成MapperFactoryBean,那么這些接口所有的Class類型都是MapperFactoryBean了。

其實集成包中除了之前的兩個類之外,還有一個MapperFactoryBean對象。

MapperFactoryBean

在MapperScannerConfigurer當中將所有的接口類型全部替換成MapperFactoryBean,所以在Spring的配置文件也可以這樣配置單個接口:

<bean id="userDao" class="org.mybatis.spring.mapper.MapperFactoryBean"><property name="mapperInterface" value="com。test。mybatis。dao。UserDao"></property><property name="SqlSessionFactory" ref="sqlSessionFactoryBean"></property>
</bean>

如果接口過多,就需要配置很多MapperFactoryBean,不方便,所以一般在企業級應用中都是配置MapperScannerConfigurer。

這樣我們調用DAO的接口對象就是MapperProxy的代理對象了,就可以操作數據庫了

示例:

&將FactoryBean本身的類獲取到,之前談Spring的時候提到過。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/537121.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/537121.shtml
英文地址,請注明出處:http://en.pswp.cn/news/537121.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

hadoop主節點切換_hadoop2.0 HA的主備自動切換

在《hadoop2.0 QJM方式的HA的配置》一文中介紹了HA的配置&#xff0c;是通過手工進行主備切換的。本文在這基礎上&#xff0c;繼續介紹HA的主備自動切換(automatic failover)的配置。自動切換是通過配置zookeeper來實現的&#xff0c;關于zookeeper的安裝和配置&#xff0c;在這…

Mybatis源碼之插件模塊分析

總結完這個Mybatis的整體主要功能基本上就差不多完&#xff0c;還有一些細節的部分&#xff0c;后續都會記錄補充。 插件這個東西一般用的比較少&#xff0c;就算用的多的插件也算是PageHelper分頁插件&#xff1b; PageHelper官網&#xff1a;https://github.com/pagehelper…

AMD推出7nm高端顯卡Radeon VII,直指英偉達RTX 2080

顯卡戰爭已經發展到了2019年&#xff0c;并且變得比任何人預想的都要激烈。 CES 2019大會上&#xff0c;AMD發布了第一款消費級的 7nm GPU&#xff0c;取名&#xff1a;Radeon VII。據了解&#xff0c;這不是 AMD 的第一顆 7nm 處理器&#xff08;早期以 AI 運算為主的 Radeon …

電子繪本pdf_【孩子必看的】20本世界著名英文繪本 | PDF電子版+MP3音頻

原標題&#xff1a;【孩子必看的】20本世界著名英文繪本 | PDF電子版MP3音頻2 —6歲年齡段的孩子&#xff0c;自我意識逐漸萌芽&#xff0c;已經明白書是一種“特殊”的玩具&#xff0c;不在撕書、咬書、把書搬來搬去。這個階段他們記憶力超強&#xff0c;唐詩、三字經啥的&…

Spring集成Mybatis多數據源配置

既然在整理Mybatis那就把經常用的這個多數據源的筆記也整一下吧。 Spring集成Mybatis在之前就已經提到了。Spring集成Mybatis 集成Mybatis多數據源有兩種方式&#xff1a; 1、創建多個SqlSessionFactory&#xff0c;掃描每個SqlSessionFactoryBean對應的包&#xff0c;形成了…

Spring文件上傳

2019獨角獸企業重金招聘Python工程師標準>>> Spring文件上傳 1、所需依賴包&#xff1a;commons-fileupload-1.3.1.jar2、Maven配置文件pom.xml文件中加入依賴Jar包<dependency><groupId>commons-fileupload</groupId><artifactId>commons-…

中英離線翻譯mac_Instant Translate for Mac-即時翻譯Mac版下載 V1.3.0-PC6蘋果網

即時翻譯(Instant Translate)Mac版是一款Mac平臺的翻譯及辭典軟件&#xff0c;Instant Translate支持90的語言互翻譯&#xff0c;通過ControlS切換語言&#xff0c;并且支持發音功能&#xff0c;并且支持自動檢測語言并進行翻譯。軟件特色Instant Translate的主要特點&#xff…

基于Zookeeper使用ZkClient實現分布式鎖

有段時間沒寫博客了&#xff0c;在整理之前寫過的一套自定義框架&#xff0c;并且整理好上傳值github上了&#xff0c;也有一些新功能還在開發&#xff0c;歡迎大家使用&#xff1a;一個好用的Http接口請求工具組件 可能今天這篇文章跟之前的比有些跳躍性&#xff0c;一下子就…

算法題學到的一些小語言細節

1.要學會用i&#xff1b;可以簡化很多代碼&#xff1a;i&#xff1b;copyFromMe(i)&#xff1b;可以寫成&#xff1a;copyFromeMe(i) 2.StringBuffer也跟列表一樣有append函數&#xff1b; 3.if語句是分支不能進行循環&#xff0c;要寫成while才能替代循環里面的判斷 4. 這里的…

android 按鈕帶圖標 陰影_android中帶圖標的按鈕(ImageButton)怎么用

展開全部除了Android系統自帶的Button按鈕以外&#xff0c;還提供了帶圖標的按鈕ImageButton要制作帶圖標的按鈕&#xff0c;首先要在布局62616964757a686964616fe58685e5aeb931333337613163文件中定義ImageButton&#xff0c;然后通過setImageDrawable方法來設置要顯示的圖標。…

Zookeeper基礎常用操作以及ACL權限

這次將Zookeeper的一些基礎用法以及權限這塊的都補充一下在這篇博客中。 上篇博客介紹了基于ZooKeeper實現的分布式鎖&#xff0c;也介紹了一些ZooKeeper的節點類型以及監聽機制&#xff0c;今天這里就不作過多的介紹了&#xff0c;大家也可以自行的去官方文檔上看看更具體的介…

[中醫經絡學習一]足陽明胃經

人體有六臟&#xff08;心、肝、脾、肺、腎五臟&#xff0c;再加心包&#xff09;六腑&#xff08;胃、小腸、大腸、膀胱、膽、三焦&#xff09;&#xff0c;每個臟腑都聯接著一條經絡&#xff0c;一共12條經絡&#xff0c;稱“十二正經”&#xff0c;經絡的走向在四肢兩側基本…

ThreadLocal原理解析以及是否需要調用remove方法

平常的開發過程中&#xff0c;如果有個類不是線程安全的&#xff0c;比如SimpleDateFormat&#xff0c;要使這個類在并發的過程中是線程安全的&#xff0c;那么可以將變量設置位局部變量&#xff0c;不過存在的問題就是頻繁的創建對象&#xff0c;對性能和資源會有一定降低和消…

Maven基礎及概念

前言 今天就來聊聊Maven的基礎和一些比較概念性的東西&#xff0c;還有一些常用的Maven命令啥的&#xff0c;主要是某人腦子記不住&#xff0c;記在博客中讓她自己看吧&#xff0c;省的費心給她找。 后續的文章會聊到Maven的一些比較高級用法&#xff0c;像自定義插件&#x…

織夢縮略圖自動補齊絕對路徑_織夢生成文章內容縮略圖時自動加上域名絕對路徑...

今天又接了個織夢CMS的有償服務,客戶想要后臺添加文章內容的時候,縮略圖自動變成帶上絕對路徑的格式.比如我們默認的縮略圖是這樣的 /uploads/allimg/150814/123P2NB-0-lp.png 他想要的效果是這樣的 http://www.youwujun.com.cn/uploads/allimg/150814/123P2NB-0-lp.png大家懂我…

BUAA 436 孟竹的復習計劃(二維樹狀數組)

題目鏈接&#xff1a;http://acm.buaa.edu.cn/problem/436/ 題意&#xff1a;一個數列兩種操作&#xff1a;&#xff08;1&#xff09;將某個位置的數字改成另一個數字&#xff1b;&#xff08;2&#xff09;交換兩個位置的數字。每次操作之后輸出逆序數的個數。 思路&#xff…

Maven之pom.xml常用標簽解析及鏡像配置

前言 Maven僅僅是個打包工具而已&#xff0c;個人覺得沒有太大必要花費在打包工具上&#xff0c;這里就列舉一下個人覺得會常用標簽的使用就好了&#xff0c;原理啥的基本就不太會去深度了解了&#xff0c;如果以后遇到需了解Maven工作原理的工作的話&#xff0c;到時候一定分…

idea 導入svn代碼_idea導入svn項目

起初和導入git項目一樣&#xff0c;file - new - project from version control - &#xff0c;這后面選 subversion。在打開的 checkout from subversion對話框中&#xff0c;輸入svn地址&#xff0c;比如 svn://11.22.33.44/demo。添加一個后&#xff0c;展開新加項&#xff…

由mysql8降級到mysql5

最近在研究liferay的使用。liferay可以連接mysql數據庫。電腦中裝的mysql的最新版本是mysql8。于是開始按照liferay的要求進行連接。但是多番嘗試后&#xff0c;均報錯&#xff1a;java.sql.SQLException: java.lang.ClassCastException: java.math.BigInteger cannot be cast …

tf計算矩陣維度_tensorflow中關于 多維tensor的運算(tf.multiply, tf.matmul, tf.tensordot)...

multiply 等同與* &#xff0c;用于計算矩陣之間的element-wise 乘法&#xff0c;要求矩陣的形狀必須一致(或者是其中一個維度為1)&#xff0c;否則會報錯&#xff1a;import tensorflow as tfa tf.constant([1, 2, 3, 4, 5, 6, 7, 8, 9, 10,11,12], shape[2, 3, 2])b tf.con…