MyBatis與Spring的整合詳解

MyBatis與Spring的整合所需jar包

要實現MyBatis與Spring的整合,很明顯需要這兩個框架的JAR包,但是隻使用這兩個框架中所提供的JAR包是不夠的,還需要其他的JAR包來配合使用,整合時所需準備的JAR包具體如下。
1.Spring框架所需的JAR包
在這裏插入圖片描述
注意:核心容器依賴的commons-logging的JAR在MyBatis框架的lib包中已經包含!
2.MyBatis框架所需的JAR包
在這裏插入圖片描述
3.MyBatis與Spring整合的中間JAR
mybatis-spring-1.3.1.jar
4.數據庫驅動JAR(MySQL)
mysql-connector-java-5.1.40-bin.jar
5.數據源所需JAR(DBCP)
commons-dbcp2-2.1.1.jar
commons-pool2-2.4.2.jar

編寫配置文件

在這裏插入圖片描述

傳統DAO方式的開發整合

採用傳統DAO開發方式進行MyBatis與Spring框架的整合時,可以使用mybatis-spring包中所提供的SqlSessionTemplate類或SqlSessionDaoSupport類來實現。

SqlSessionTemplate:是mybatis-spring的核心類,它負責管理MyBatis的SqlSession,調用MyBatis的SQL方法。當調用SQL方法時,SqlSessionTemplate將會保證使用的SqlSession和當前Spring的事務是相關的。它還管理SqlSession的生命週期,包含必要的關閉、提交和回滾操作。
SqlSessionDaoSupport:是一個抽象支持類,它繼承了DaoSupport類,主要是作爲DAO的基類來使用。可以通過SqlSessionDaoSupport類的getSqlSession()方法來獲取所需的SqlSession。

Mapper接口方式的開發整合

在MyBatis+Spring的項目中,雖然使用傳統的DAO開發方式可以實現所需功能,但是採用這種方式在實現類中會出現大量的重複代碼,在方法中也需要指定映射文件中執行語句的id,並且不能保證編寫時id的正確性(運行時才能知道)。
爲此,我們可以使用MyBatis提供的另外一種編程方式,即使用Mapper接口編程。

1.基於MapperFactoryBean的整合

MapperFactoryBean是MyBatis-Spring團隊提供的一個用於根據Mapper接口生成Mapper對象的類,該類在Spring配置文件中使用時可以配置以下參數:
mapperInterface:用於指定接口;
SqlSessionFactory:用於指定SqlSessionFactory;
SqlSessionTemplate:用於指定SqlSessionTemplate。如果與SqlSessionFactory同時設定,則只會啓用SqlSessionTemplate。

注意:雖然使用Mapper接口編程的方式很簡單,但在具體使用時還是需要遵循一些規範。
在這裏插入圖片描述

2.基於MapperScannerConfigurer的整合

在實際的項目中,DAO層會包含很多接口,如果每一個接口都在Spring配置文件中配置,不但會增加工作量,還會使得Spring配置文件非常臃腫。爲此,可以採用自動掃描的形式來配置MyBatis中的映射器——採用MapperScannerConfigurer類。

MapperScannerConfigurer類在Spring配置文件中可以配置以下屬性:
basePackage:指定映射接口文件所在的包路徑,當需要掃描多個包時可以使用分號或逗號作爲分隔符。指定包路徑後,會掃描該包及其子包中的所有文件。
annotationClass:指定了要掃描的註解名稱,只有被註解標識的類纔會被配置爲映射器。
sqlSessionFactoryBeanName:指定在Spring中定義的SqlSessionFactory的Bean名稱。
sqlSessionTemplateBeanName:指定在Spring中定義的SqlSessionTemplate的Bean名稱。如果定義此屬性,則sqlSessionFactoryBeanName將不起作用
markerInterface:指定創建映射器的接口。

通常情況下,MapperScannerConfigurer在使用時只需通過basePackage屬性指定需要掃描的包即可,Spring會自動的通過包中的接口來生成映射器。這使得開發人員可以在編寫很少代碼的情況下,完成對映射器的配置,從而提高開發效率。

測試事務

在項目中,Service層(service是業務層,dao是數據訪問層)既是處理業務的地方,又是管理數據庫事務的地方。要對事務進行測試,首先需要創建Service層,並在Service層編寫添加客戶操作的代碼;然後在添加操作的代碼後,有意的添加一段異常代碼(如int i = 1/0;)來模擬現實中的意外情況;最後編寫測試方法,調用業務層的添加方法。這樣,程序在執行到錯誤代碼時就會出現異常。
沒有事務管理的情況下,即使出現了異常,數據也會被存儲到數據表中;如果添加了事務管理,並且事務管理的配置正確,那麼在執行上述操作時,所添加的數據將不能夠插入到數據表中

注意要點:

  • service是業務層,dao是數據訪問層
  • 在MyBatis+Spring的項目中,事務是由Spring來管理的
  • 在項目中,Service層既是處理業務的地方,又是管理數據庫事務的地方。
  • 進行註解開發時,需要在配置文件中配置事務管理器並開啓事務註解。
  • 可以使用mybatis-spring包中所提供的SqlSessionTemplate類或SqlSessionDaoSupport類來實現向DAO實現類中注入SqlSessionFactory。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章