Mybatis系列(三)Mybatis与Spring整合

一.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;
    }
}

猜你喜欢

转载自blog.csdn.net/bestmy/article/details/81056848