MyBatis-Spring 会帮助你将 MyBatis 代码无缝地整合到 Spring 中。它将允许 MyBatis 参与到 Spring 的事务管理之中,创建映射器 mapper 和 SqlSession 并注入到 bean 中,以及将 Mybatis 的异常转换为 Spring 的 DataAccessException。最终,可以做到应用代码不依赖于 MyBatis,Spring 或 MyBatis-Spring。
Mybatis整合spring
- 整合思路
- SqlSessionFactory对象应该放到spring容器中作为单例存在。
- 传统dao的开发方式中,应该从spring容器中获得sqlsession对象。
- Mapper代理形式中,应该从spring容器中直接获得mapper的代理对象。
- 数据库的连接以及数据库连接池事务管理都交给spring容器来完成。
整合需要的jar包
- spring的jar包
- Mybatis的jar包
- Spring+mybatis的整合包。
- Mysql的数据库驱动jar包。
- 数据库连接池的jar包。
整合的步骤
创建一个java工程。
导入jar包。(上面提到的jar包)
mybatis的配置文件sqlmapConfig.xml
编写Spring的配置文件
数据库连接及连接池
事务管理(暂时可以不配置)
sqlsessionFactory对象,配置到spring容器中
mapeer代理对象或者是dao实现类配置到spring容器中。
编写dao或者mapper文件
测试。
- SqlMapConfig.xml
-
- "1.0" encoding="UTF-8" ?>
-
-
- PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
-
- "http://mybatis.org/dtd/mybatis-3-config.dtd">
-
-
-
name ="com.pp.mybatis.pojo"/> -
-
-
-
"sqlmap/User.xml" /> -
-
-
-
-
- applicationContext.xml
-
- "1.0" encoding="UTF-8"?>
-
"http://www.springframework.org/schema/beans" -
- xmlns:context="http://www.springframework.org/schema/context"
-
- xmlns:p="http://www.springframework.org/schema/p"
-
- xmlns:aop="http://www.springframework.org/schema/aop"
-
- xmlns:tx="http://www.springframework.org/schema/tx"
-
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-
- xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans-4.0.xsd
-
- http://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context-4.0.xsd
-
- http://www.springframework.org/schema/aophttp://www.springframework.org/schema/aop/spring-aop-4.0.xsdhttp://www.springframework.org/schema/txhttp://www.springframework.org/schema/tx/spring-tx-4.0.xsd
-
- http://www.springframework.org/schema/utilhttp://www.springframework.org/schema/util/spring-util-4.0.xsd">
-
- -- 加载配置文件 -->
-
"classpath:db.properties" /> -
- -- 数据库连接池 -->
-
"dataSource" -
- class="org.apache.commons.dbcp.BasicDataSource"
-
- destroy-method="close">
-
name ="driverClassName" value="${jdbc.driver}" /> -
name ="url" value="${jdbc.url}" /> -
name ="username" value="${jdbc.username}" /> -
name ="password" value="${jdbc.password}" /> -
name ="maxActive" value="10" /> -
name ="maxIdle" value="5" /> -
-
-
- -- mapper配置 -->
-
- -- 让spring管理sqlsessionfactory 使用mybatis和spring整合包中的 -->
-
"sqlSessionFactory" -
- class="org.mybatis.spring.SqlSessionFactoryBean">
-
- -- 数据库连接池 -->
-
name ="dataSource" ref="dataSource" /> -
- -- 加载mybatis的全局配置文件 -->
-
name ="configLocation" value="classpath:mybatis/SqlMapConfig.xml" -
- />
-
-
-
-
db.properties
- jdbc.driver=com.mysql.jdbc.Driver
-
- jdbc.url=jdbc:mysql://localhost:3306/mybatis?characterEncoding=utf-8
-
- jdbc.username=root
-
- jdbc.password=root
Dao的开发
三种dao的实现方式:
传统dao的开发方式
使用mapper代理形式开发方式
使用扫描包配置mapper代理。
传统dao的开发方式
接口+实现类来完成。需要dao实现类需要继承SqlsessionDaoSupport类
Dao实现类
- public class UserDaoImpl extends SqlSessionDaoSupport implements UserDao {
-
- @Override
-
- public User findUserById(int id) throws Exception {
-
- SqlSession session = getSqlSession();
-
- User user = session.selectOne("test.findUserById", id);
-
- //不能关闭SqlSession,让spring容器来完成
-
- //session.close();
-
- return user;
-
- }
-
- @Override
-
- public void insertUser(User user) throws Exception {
-
- SqlSession session = getSqlSession();
-
- session.insert("test.insertUser", user);
-
- session.commit();
-
- //session.close();
-
- }
-
- }
配置dao
把dao实现类配置到spring容器中
- -- 配置UserDao实现类 -->
-
"userDao" class="com.pp.dao.UserDaoImpl"> -
name ="sqlSessionFactory" ref="sqlSessionFactory"/> -
-
-
- 测试方法
-
- 初始化:
-
- private ApplicationContext applicationContext;
-
- @Before
-
- public void setUp() throws Exception{
-
- String configLocation = "classpath:spring/ApplicationContext.xml";
-
- //初始化spring运行环境
-
- applicationContext = new ClassPathXmlApplicationContext(configLocation);
-
- }
-
- 测试:
-
- @Test
-
- public void testFindUserById() throws Exception {
-
- UserDao userDao = (UserDao) applicationContext.getBean("userDao");
-
- User user = userDao.findUserById(1);
-
- System.out.println(user);
-
- }
Mapper代理形式开发dao
a.开发mapper接口
开发mapper文件
配置mapper代理
- -- 配置mapper代理对象 -->
-
"org.mybatis.spring.mapper.MapperFactoryBean" > -
name ="mapperInterface" -
- value="com.pp.mybatis.mapper.UserMapper"/>**
-
name ="sqlSessionFactory" ref="sqlSessionFactory"> -
-
-
- 测试方法
-
- public class UserMapperTest {
-
- private ApplicationContext applicationContext;
-
- @Before
-
- public void setUp() throws Exception {
-
- applicationContext = new
-
- ClassPathXmlApplicationContext("classpath:spring/applicationContext.xml");**
-
- }
-
- @Test
-
- public void testGetUserById() {
-
- UserMapper userMapper = applicationContext.getBean(UserMapper.class);
-
- User user = userMapper.getUserById(1);
-
- System.out.println(user);
-
- }
-
- }
扫描包形式配置mapper
"org.mybatis.spring.mapper.MapperScannerConfigurer"> -
name ="basePackage" value="com.pp.mybatis.mapper"> -
-
每个mapper代理对象的id就是类名,首字母小写
【编辑推荐】