【Java】MyBatis与Spring框架整合(一)
本文將利用 Spring 對 MyBatis 進行整合,在對組件實現解耦的同時,還能使 MyBatis 框架的使用變得更加方便和簡單。
整合思路
作為 Bean 容器,Spring 框架提供了 IoC 機制,可以接管所有組件的創建工作并進行依賴管理,因為整合的主要工作就是把 MyBatis 框架使用中所涉及的核心組件配置到 Spring 容器中,交給 Spring 來創建和管理。
具體來說,業務邏輯對象依賴基于 MyBatis 技術實現的 DAO 對象,核心是獲取 SqlSession 實例。要獲得 SqlSession 實例,則需要依賴 SqlSessionFactory 實例。而 SqlSessionFactory 是 SqlSessionFactoryBuilder 依據 MyBatis 配置文件中的數據源、Sql映射文件等信息來構建的。
現在,我們只需把以上流程全部移交給 Spring,發揮 Spring 框架 Bean 容器的作用,就能接管組件的創建工作,管理組件的生命周期,并對組件之間的依賴關系進行解耦合管理。
準備工作
1.在項目中加入 Spring、MyBatis 及整合相關的 JAR 文件
Spring 整合 MyBatis 所需 jar 包
我已上傳到百度云網盤,大家可以點擊這里下載,密碼: xlk3?
2.建立開發目錄結構,創建實體類
3.創建數據訪問接口
4.配置 SQL 映射文件
為 IUserMapper 配置 SQL 語句映射文件 IUserMapper.xml,實現指定的查詢映射。
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper SYSTEM "http://mybatis.org/dtd/mybatis-3-mapper.dtd" > <mapper namespace="cn.xxxx.mapper.IUserMapper"><select id="queryAll" resultType="USER">select * from user</select> </mapper>5.配置 MyBatis 配置文件
編寫 MyBatis 配置文件 mybatis_config.xml ,設置所需參數。
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"> <configuration><!-- 類型別名 --><typeAliases><package name="cn.xxxx.pojo" /></typeAliases> </configuration>這里的 MyBatis 配置文件內容與之前相比簡單了許多,這是因為 Spring 可以接管 MyBatis 配置信息的維護工作。我們選擇把數據源配置和 SQL 映射信息轉移至 Spring 配置文件中進行管理。
實現整合
Spring 需要依次完成加載 MyBatis 配置信息、構建 SqlSessionFactory 和 SqlSession 實例,完成對業務邏輯對象的依賴注入等工作。這些工作大多以配置文件的方式實現,無須編寫相關類。
配置數據源
對于任何持久化解決方案,數據庫連接都是首先要解決的問題。在 Spring 中,數據源作為一個重要的組件可以單獨進行配置和維護。我們將 MyBatis 配置文件中有關數據源的配置移除,轉移到 Spring 配置文件中進行維護。
這里以配置 dbcp 數據源為例
<!-- 數據源 —— 數據庫連接池管理 dbcp --><bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"><property name="driverClassName" value="com.mysql.jdbc.Driver"></property><property name="url" value="jdbc:mysql://localhost:3306/smbms"></property><property name="username" value="root"></property><property name="password" value="ok"></property></bean>配置 SqlSessionFactoryBean
在 MyBatis 中,SqlSessionFactory 的實例需要使用 SqlSessionFactoryBuilder 創建;而在集成環境中,則可以使用 MyBatis-Spring 整合包中的 SqlSessionFactoryBean 來代替。SqlSessionFactoryBean 封裝了使用 SqlSessionFactoryBuilder 創建 SqlSessionFactory 的過程,我們可以在 Spring 中以配置文件的形式,通過配置 SqlSessionFactoryBean 獲得 SqlSessionFactory 實例。
<!-- sqlSession工廠 --><bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"><!-- 引用數據源組件 --><property name="dataSource" ref="dataSource"></property>
<!-- 引用 MyBatis 配置文件中的配置 --><property name="configLocation" value="classpath:mybatis_config.xml"></property>
<!-- 配置 SQL 映射文件信息 --><property name="mapperLocations" value="classpath:cn/xxxx/mapper/*.xml"></property></bean>
?通過上個示例配置的 id 為 SqlSessionFactory 的 Bean 即可獲得 SqlSessionFactory 實例。
示例中?"classpath:cn/xxxx/mapper/*.xml" 表示掃描 cn.xxxx.mapper 包及其任意層級的子包中,任意名稱的 xml 類型的文件。
使用 SqlSessionTemplate 實現數據庫的操作
對于 MyBatis 而言,得到 SqlSessionFactory 實例,就可以進一步獲取 SqlSession 實例進行數據庫操作。而在集成環境中,為了更好地使用 SqlSession,充分利用 Spring 框架提供的服務,MyBatis-Spring 整合包提供了 SqlSessionTemplate 類。
SqlSessionTemplate 類實現了 MyBatis 的 SqlSession 接口,可以替換 MyBatis 中原有的 SqlSession 實現類提供數據庫訪問操作。
配置 SqlSessionTemplate
在 IUserMapper 實現類使用注解進行注入,代碼如下
1 @Repository("userMapper") 2 public class UserMapper implements IUserMapper {3 4 @Resource(name="sqlSessionTemplate") 5 private SqlSessionTemplate template;6 7 @Override8 public List<USER> queryAll() {9 return template.getMapper(IUserMapper.class).queryAll(); 10 } 11 12 }Spring 配置文件代碼如下:
1 <!-- 配置 SqlSessionTemplate --> 2 <bean id="sqlSessionTemplate" class="org.mybatis.spring.SqlSessionTemplate"> 3 <constructor-arg name="sqlSessionFactory" ref="sqlSessionFactory" />4 </bean> 5 <context:component-scan base-package="cn.xxxx.*" />
6 <aop:aspectj-autoproxy />
注意:
1)創建 SqlSessionTemplate 實例時,需要通過其構造方法注入 SqlSessionFactory 實例。這里引用的是前文配置過的 id 為 SqlSessionFactory 的 Bean。
2)與 MyBatis 中默認的 SqlSession 實現不同,SqlSessionTemplate 是線程安全的,可以以單例模式配置并被多個 DAO 對象共用,而不必為每個 DAO 單獨配置一個 SqlSessionTemplate 實例。
編寫業務邏輯代碼
1 import java.util.List;2 3 import org.springframework.beans.factory.annotation.Autowired;4 import org.springframework.beans.factory.annotation.Qualifier;5 import org.springframework.stereotype.Service;6 import cn.xxxx.mapper.IUserMapper;7 import cn.xxxx.pojo.USER;8 import cn.xxxx.service.IUserService;9 10 @Service("userSerivce") 11 public class UserService implements IUserService{ 12 13 @Autowired 14 @Qualifier("userMapper") 15 private IUserMapper userMapper; 16 17 @Override 18 public List<USER> queryAll() { 19 return userMapper.queryAll(); 20 } 21 }這里使用注解實現組件注入,測試方法省略。。。。
下次更新注入映射器實現和事務功能
總結
以上是生活随笔為你收集整理的【Java】MyBatis与Spring框架整合(一)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 通配符及输入输出重定向、管道符和作业控制
- 下一篇: Django介绍工程搭建