MyBatis與Spring之間的整合

Spring-MyBatis

Spring 3.0僅支持iBatis2。那麼, 我們就想將MyBatis3的支持添加到Spring3.0
(參考 Spring 的 Jira的問題)中。不幸的是,Spring 3.0 的開發在 MyBatis 3.0 官方發佈前就
結束了。因爲Spring開發團隊不想發佈一個基於非發行版的MyBatis的整合支持,那麼 Spring
官方的支持就不得不繼續等待了。要在 Spring 中支持 MyBatis,MyBatis社區認爲現在應該
是自己團結貢獻者和有興趣的人一起來開始將Spring的整合作爲MyBatis社區的子項目的時
候了。

要求:

 要使用 MyBatis-Spring 模塊,需要包含 mybatis-spring-1.x.jar文件,並在類路徑中加入依賴關係。
要和 Spring 一起使用 MyBatis,你需要在 Spring 應用上下文中定義至少兩樣東西:一個SqlSessionFactory和至少一個數據映射器類。
在 MyBatis-Spring 中,SqlSessionFactoryBean是用於創建 SqlSessionFactory的。要配置這個工廠 bean,放置下面的代碼在 Spring 的 XML 配置文件中:
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
</bean>  

 

SqlSessionFactoryBean

在基本的 MyBatis中,session 工廠可以使用 SqlSessionFactoryBuilder.來創建。在myBatis-Spring 中,使用了SqlSessionFactoryBean來替代。
SqlSessionFactory有一個單獨的必須屬性,就是 JDBC 的 DataSource。
一個通用的屬性是 configLocation,它是用來指定 MyBatis的 XML 配置文件路徑的。
mapperLocations屬性使用一個資源位置的list。這個屬性可以用來指定MyBatis的XML
映射器文件的位置。它的值可以包含 Ant 樣式來加載一個目錄中所有文件,或者從基路徑下遞歸搜索所有路徑。
示例:
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> 
<property name="dataSource" ref="dataSource" /> 
<property  name="mapperLocations"  value="classpath*:sample/config/mappers/**/*.xml"  />
</bean> 
這會從類路徑下加載在 sample.config.mappers 包和它的子包中所有的 MyBatis 映射器XML 文件。 


canMybatisSpring

 

用的包:

 

類:

 

TestMyBatisSpring.java

package cn.hncu.test;

import java.sql.Connection;
import java.sql.SQLException;
import java.util.List;

import javax.sql.DataSource;

import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import cn.hncu.domain.User;

public class TestMyBatisSpring {
	
	//測試在Spring框架下數據庫是否能夠成功連接
	@Test
	public void test1() throws SQLException{
		ApplicationContext ctx=new ClassPathXmlApplicationContext("applicationContext.xml");
		DataSource ds=ctx.getBean("dataSource",DataSource.class);
		Connection con=ds.getConnection();
		System.out.println("con: "+con);
	}
	
	//測試利用Spring框架下sqlSessionFactory-----bean進行數據庫查詢是否成功
	@Test
	public void test2() throws SQLException{
		ApplicationContext ctx=new ClassPathXmlApplicationContext("applicationContext.xml");
		SqlSessionFactory factory=ctx.getBean("sqlSessionFactory",SqlSessionFactory.class);
		SqlSession ss=factory.openSession();
		List<User> users=ss.selectList("users.all");
		System.out.println(users);
	}
}


加載的配置文件:applicationContext.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
		xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
		xmlns:context="http://www.springframework.org/schema/context"
		xmlns:aop="http://www.springframework.org/schema/aop"
		xmlns:tx="http://www.springframework.org/schema/tx"
		xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.3.xsd
				http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd
				http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.3.xsd
				http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.3.xsd">
	<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
		<property name="driverClass" value="com.mysql.jdbc.Driver"></property>
		<property name="jdbcUrl" value="jdbc:mysql://127.0.0.1:3306/mybatis?characterEncoding=UTF-8"></property>
		<property name="user" value="hncu"></property>
		<property name="password" value="1234"></property>
	</bean>
	<bean id="txM" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
		<property name="dataSource" ref="dataSource"></property>
	</bean>
	<!-- 配置事務 -->
	<tx:advice id="txAdvice" transaction-manager="txM">
		<tx:attributes>
			<tx:method name="*" propagation="REQUIRED"/>
		</tx:attributes>
	</tx:advice>
	<aop:config>
		<aop:pointcut expression="execution(* cn..*Service.*(..))" id="cut"/>
		<aop:advisor advice-ref="txAdvice" pointcut-ref="cut"/>
	</aop:config>
	
	
	<!-- 以下配置把mybatis 架到spring上 -->
	<!-- 用spring創建一個sqlSessionFactory的bean -->
	<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
		<property name="dataSource" ref="dataSource"></property>
		<!-- mybatis配置文件的指定方式1: 先加載mybatis - config.xml配置文件,然後由該配置文件中<mappers>元素配置加載哪些映射文件 
		<property name="configLocation">
			<value>classpath:mybatis-config.xml</value>
		</property>	
		-->
		<!-- mybatis配置文件的指定方式2: 丟棄mybatis - config.xml配置文件,然後直接注入dataSource且由下面直接指定Mapper文件列表 -->
		<property name="mapperLocations">
			<list>
				<value>
					classpath:cn/hncu/domain/*.xml
				</value>
			</list>
		</property>	
	</bean>
	
	
</beans>


值對象:User.java

package cn.hncu.domain;
public class User {
	private String id;
	private String name;
	private String pwd;
	public String getId() {
		return id;
	}
	public void setId(String id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getPwd() {
		return pwd;
	}
	public void setPwd(String pwd) {
		this.pwd = pwd;
	}
	@Override
	public String toString() {
		return "User [id=" + id + ", name=" + name + ", pwd=" + pwd + "]";
	}
	
}


MyBatis所需值對象的映射文件:User.xml

<?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="users">
	
	<select id="all" resultType="cn.hncu.domain.User">
		select * from users
	</select>
</mapper>


經測試:MyBatis與Spring整合成功。

發佈了121 篇原創文章 · 獲贊 49 · 訪問量 18萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章