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整合测试代码

测试代码结构图
Mybatis系列(三)Mybatis与Spring整合_第1张图片
applicationContext.xml


<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>

<bean  id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean" >

<property value="classpath:cjx/AddToSpring/SqlMapConfig.xml" name="configLocation"/>

<property name="dataSource" ref="dataSource"/>
bean>



<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">

<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



<configuration>
    
    <typeAliases>
        
        <package name="pojo" />
    typeAliases>
configuration>

UserMapper.xml




<mapper namespace="cjx.AddToSpring.UserMapper" >

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

你可能感兴趣的:(JAVA-WEB)