文章目录
Spring和Mybatis的整合
1、整合思想
- 将mybatis中的实例交给Spring管理,Spring通过单例方式来管理SQLSessionFactory。
- mybatis中SQLSessionFactory的创建是通过SQLSessionFactoryBuilder来创建实例化,在mybatis和Spring的整合后,通过SQLSessionFactoryBean来替代,SQLSessionFactoryBean必须给定一个属性dataSource。
- 给定一个属性configLocation,用来指定mybatis的xml配置文件。
2、整合步骤
(1)引入依赖
- 引入Spring的依赖。
- 引入MyBatis的依赖。
- 还需要MyBatis提供的一个专门整合Spring的jar包:
mybatis-spring
。
<!--mybatis和spring整合jar-->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>1.3.0</version>
</dependency>
(2)创建bean类(User.java)
/**
* 数据库映射对象
*/
public class User {
private Long id;
private String userName;
private long sex;
private String address;
//get/set/to String方法
}
(3)Mapper接口文件(UserMapper.java)
public interface UserMapper {
public User getUserById(Long id);
}
(4)Mapper.xml文件(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命令空间,随便写,一般保证命名空间唯一 -->
<mapper namespace="com.tulun.dao.UserMapper">
<select id="getUserById" resultType="com.tulun.bean.User">
select * from user where id=#{id};
</select>
</mapper>
(5)整合sqlSessionFactory创建(spring-mybatis.xml)
<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"
xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
<!--配置数据源-->
<bean id="dataSource" class="com.mchange.v2.c3p0.DriverManagerDataSource">
<!--配置连接数据库的核心配置4个参数-->
<property name="driverClass" value="com.mysql.jdbc.Driver"/>
<property name="user" value="root"/>
<property name="password" value="123456"/>
<property name="jdbcUrl" value="jdbc:mysql://localhost:3306/test"/>
</bean>
<!--配置sqlSessionFactory-->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<!--配置数据源-->
<property name="dataSource" ref="dataSource"/>
<!--加载mybatis的配置-->
<property name="configLocation" value="mybatis/mybatis.xml"/>
<!--配置xml文件的映射,在mybatis的中,在<mapper>标签下添加的-->
<property name="mapperLocations">
<list>
<value>mapper/UserMapper.xml</value>
</list>
</property>
</bean>
</beans>
注意:MyBatis的全局配置文件(mybatis-config.xml)中的数据源以及mapper映射放入到Spring中(此时该mapper文件中并没有任何内容)。
<?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>
<!--数据源 在spring整合后,将数据源放在spring的配置文件中-->
<!--<environments default="">-->
<!--<environment id="">-->
<!--<transactionManager type=""></transactionManager>-->
<!--<dataSource type=""></dataSource>-->
<!--</environment>-->
<!--</environments>-->
<!--mapper 在和spring整合后,可以放在spring配置文件中-->
<!--<mappers>-->
<!--<mapper resource=""/>-->
<!--</mappers>-->
</configuration>
(6)通过代理对象操作(spring-mybatis.xml)
<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"
xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
<!--配置数据源-->
<bean id="dataSource" class="com.mchange.v2.c3p0.DriverManagerDataSource">
<!--配置连接数据库的核心配置4个参数-->
<property name="driverClass" value="com.mysql.jdbc.Driver"/>
<property name="user" value="root"/>
<property name="password" value="123456"/>
<property name="jdbcUrl" value="jdbc:mysql://localhost:3306/test"/>
</bean>
<!--配置sqlSessionFactory-->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<!--配置数据源-->
<property name="dataSource" ref="dataSource"/>
<!--加载mybatis的配置-->
<property name="configLocation" value="mybatis/mybatis.xml"/>
<!--配置xml文件的映射,在mybatis的中,在<mapper>标签下添加的-->
<property name="mapperLocations">
<list>
<value>mapper/UserMapper.xml</value>
</list>
</property>
</bean>
<!--
通过代理对象进行mapper的映射
class即mybatis-spring包提供的MapperFactoryBean
-->
<bean id="userMapper" class="org.mybatis.spring.mapper.MapperFactoryBean">
<!--mapperInterface指定mapperjie接口-->
<property name="mapperInterface" value="com.tulun.dao.UserMapper"/>
<!--指定SQLSessionFactory-->
<property name="sqlSessionFactory" ref="sqlSessionFactory"/>
</bean>
</beans>
(7)测试类
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class SpringMyBatisTest {
public static void main(String[] args) {
//获取IOC的容器
ClassPathXmlApplicationContext applicationContext =
new ClassPathXmlApplicationContext("mybatis/spring-mybatis.xml");
//通过容器来获取当前的对象(通过无参构造来实例对象方法)
//获取User对象
//验证前置通知
UserMapper userMapper = (UserMapper) applicationContext.getBean("userMapper");
User user = userMapper.getUserById(1L);
System.out.println(user);
}
}