整合思路
- 1、让spring管理SqlSessionFactory
- 2、让spring管理mapper对象和dao。
使用spring和mybatis整合开发mapper代理及原始dao接口。
自动开启事务,自动关闭 sqlsession. - 3、让spring管理数据源( 数据库连接池)
整合结构
导jar包
- mybatis框架的包
- spring框架的包
- 数据库驱动包
- mybatis和spring的整合包
配置文件
Mybatis的配置文件SqlMapConfig.xml
-
只配置别名、settings、mappers,数据源不在这里配置
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"> <configuration> <!-- 定义 别名 --> <typeAliases> <!-- 批量别名定义 指定包路径,自动扫描包下边的pojo,定义别名,别名默认为类名(首字母小写或大写) --> <package name="po" /> </typeAliases> <mappers> <!-- 加载原始dao使用的user.xml --> <mapper resource="config/sqlmap/User.xml"/> <!--读取mapper下的xml文件--> <package name="mapper" /> </mappers> </configuration>
applicationContext.xml
1、数据源(dpcp连接池)
2、SqlSessionFactory
3、mapper或dao
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:mvc="http://www.springframework.org/schema/mvc"
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-3.2.xsd ..........等约束
">
<!-- 加载配置文件 -->
<context:property-placeholder location="classpath:config/db.properties" />
<!-- 数据源配置 -->
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"
destroy-method="close">
<property name="driverClassName" value="${jdbc.driver}" />
<property name="url" value="${jdbc.url}" />
<property name="username" value="${jdbc.username}" />
<property name="password" value="${jdbc.password}" />
<property name="maxActive" value="10" />
<property name="maxIdle" value="5" />
</bean>
<!-- SqlsessionFactory -->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<!-- 数据源 -->
<property name="dataSource" ref="dataSource"/>
<!-- mybatis配置文件 -->
<property name="configLocation" value="classpath:config/mybatis/SqlMapConfig.xml"/>
</bean>
<!-- 配置dao -->
<bean id="userDao" class="dao.UserDaoImpl">
<property name="sqlSessionFactory" ref="sqlSessionFactory"/>
</bean>
<!-- 配置mapper,逐个表编写
MapperFactoryBean:用于生成mapper代理对象
-->
<!--<bean id="userMapper" class="org.mybatis.spring.mapper.MapperFactoryBean">-->
<!--<property name="mapperInterface" value="mapper.UserMapper"/>-->
<!--<property name="sqlSessionFactory" ref="sqlSessionFactory"/>-->
<!--</bean>-->
<!--
MapperScannerConfigurer:mapper的扫描器,将包下边的mapper接口自动创建代理对象,自动创建到spring容器中,bean的id是mapper的类名(首字母小写)
-->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<!-- 配置扫描包的路径
如果要扫描多个包,中间使用半角逗号分隔
-->
<property name="basePackage" value="mapper"/>
<!-- 使用sqlSessionFactoryBeanName -->
<property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/>
</bean>
</beans>
测试(以测试dao为例)
package test.dao;
import dao.UserDao;
import org.junit.Before;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
mport org.springframework.context.support.ClassPathXmlApplicationContext;
import po.User;
public class UserDaoImplTest {
private ApplicationContext applicationContext;
@Before
public void setUp(){
//创建spring 容器
applicationContext = new ClassPathXmlApplicationContext("config/spring/applicationContext.xml");
}
@Test
public void testFindUserById(){
//从spring容器中获取UserDao这个bean
UserDao userDao = (UserDao) applicationContext.getBean("userDao");
User userById = userDao.findUserById(1);
System.out.println(userById);applicationContext.getBean("userById");
//测试mapper
UserMapper userMapper = (UserMapper)
User userById = userMapper.findUserById(1);
}
}
原始dao整合
- 使用SqlsessionTemplate或SqlSessionDaoSupport类在DAO实现类中注入SqlSessionFactory来创建SqlSession。
- 开发dao(编写UserDao 、UserDaoImpl)
- 配置dao (在applicationContext.xml配置)
-
接口测试
整合mapper
- 基于MapperFactoryBean整合
- 基于MapperScannerConfigurer整合
- 编写配置文件
-
编写Usermapper.java Usermapper.xml