一.Mybatis与Spring整合概述
MyBatis-Spring 会帮助你将 MyBatis 代码无缝地整合到 Spring 中。 使用这个类库中的类, Spring 将会加载必要的 MyBatis 工厂类和 session 类。 这个类库也提供一个简单的方式来注入 MyBatis 数据映射器和 SqlSession 到业务层的 bean 中。 而且它也会处理事务, 翻译 MyBatis 的异常到 Spring 的 DataAccessException 异常(数据访问异常,译者注)中。最终,它并 不会依赖于 MyBatis,Spring 或 MyBatis-Spring 来构建应用程序代码。
转载自官网:http://www.mybatis.org/spring/zh/
1. 整合思路
1、SqlSessionFactory对象应该放到spring容器中作为单例存在。
2、传统dao的开发方式中,应该从spring容器中获得sqlsession对象。
3、Mapper代理形式中,应该从spring容器中直接获得mapper的代理对象。
4、数据库的连接以及数据库连接池事务管理都交给spring容器来完成。
2. 整合需要的jar包
1、spring的jar包
2、Mybatis的jar包
3、Spring+mybatis的整合包。
4、Mysql的数据库驱动jar包。
5、数据库连接池的jar包。
二.Mybatis与Spring整合测试代码
测试代码结构图
applicationContext.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.springframework.org/schema/beans" 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.2.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.2.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.2.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.2.xsd ">
<!-- 加载配置文件 -->
<context:property-placeholder location="classpath:db.properties" />
<!-- 数据库连接池 -->
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" >
<property name="driverClassName" value="${jdbc.driverClass}" />
<property name="url" value="${jdbc.jdbcUrl}" />
<property name="username" value="${jdbc.user}" />
<property name="password" value="${jdbc.Password}"></property>
<property name="maxActive" value="10"></property>
<property name="maxIdle" value="5"></property>
</bean>
<!-- Mybatis的SqlSession工厂 -->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean" >
<!-- 核心配置文件的位置 -->
<property value="classpath:cjx/AddToSpring/SqlMapConfig.xml" name="configLocation"/>
<!-- 注入数据源 -->
<property name="dataSource" ref="dataSource"/>
</bean>
<!-- Dao配置原始Dao开发
使用接口,接口实现类,配置sqlSessionFactory
<bean class="cjx.AddToSpring.UserDaoImpl" id="userDao">
<property name="sqlSessionFactory" ref="sqlSessionFactoryBean"/>
</bean>
-->
<!-- Mapper动态代理开发配置Mapper工厂,使用扫描后可以不配置
1.注入SqlSession工厂
2.注入自己开发的MapperInterface
<bean id="userMapper" class="org.mybatis.spring.mapper.MapperFactoryBean" >
<property name="sqlSessionFactory" ref="sqlSessionFactory"/>
<property name="mapperInterface" value="cjx.AddToSpring.UserMapper" />
</bean>
-->
<!-- Mapper动态代理开发扫描 -->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<!-- 基本包,会自动扫描包下的Mapper -->
<property value="cjx.AddToSpring" name="basePackage"/>
</bean>
</beans>
AddSpring.java
/*Mybatis整合spring
一. 整合思路
1、SqlSessionFactory对象应该放到spring容器中作为单例存在。
2、传统dao的开发方式中,应该从spring容器中获得sqlsession对象。
3、Mapper代理形式中,应该从spring容器中直接获得mapper的代理对象。
4、数据库的连接以及数据库连接池事务管理都交给spring容器来完成。
二. 整合需要的jar包
1、spring的jar包
2、Mybatis的jar包
3、Spring+mybatis的整合包。
4、Mysql的数据库驱动jar包。
5、数据库连接池的jar包。
*/
@SuppressWarnings("resource")
public class AddSpring {
@Test
public void fun1(){//Mapper动态代理开发配置Mapper工厂(已注释)
ApplicationContext ac = new ClassPathXmlApplicationContext("cjx/AddToSpring/applicationContext.xml");
UserMapper um = (UserMapper) ac.getBean("userMapper");
User u = um.selectUserById(1);
System.out.println(u);
}
@Test
public void fun2(){// Mapper动态代理开发自动扫描
ApplicationContext ac = new ClassPathXmlApplicationContext("cjx/AddToSpring/applicationContext.xml");
UserMapper um = (UserMapper) ac.getBean(UserMapper.class);
User u = um.selectUserById(1);
System.out.println(u);
}
}
SqlMapConfig.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="pojo" />
</typeAliases>
</configuration>
UserMapper.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="cjx.AddToSpring.UserMapper" >
<!-- 通过ID查询一个用户 -->
<select id="selectUserById" parameterType="Integer" resultType="cjx.pojo.User">
select * from user where id = ${value}
</select>
</mapper>
UserDaoImpl.java
public class UserDaoImpl extends SqlSessionDaoSupport {
//mybatis提供了一个类,可以直接继承获得SqlSession,但是需要spring注入sqlSessionFactory
public void insertUser(){
//可以直接通过父类获得SqlSession,sqlSessionFactory注入到了父类SqlSessionDaoSupport
this.getSqlSession().insert("", "");
}
}
UserMapper.java
public interface UserMapper {
public User selectUserById(Integer id);
}
POJO类User.java
public class User {
private Integer id;
private String username;
private String password;
@Override
public String toString() {
return "User [id=" + id + ", username=" + username + ", password=" + password + "]";
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}