Spring-MyBatis
要求:
SqlSessionFactoryBean
示例:
<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整合成功。