【MyBatis】Spring和Mybatis的整合

文章目录


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

(8)执行结果

【MyBatis】Spring和Mybatis的整合

上一篇:Mybatis之增删改查


下一篇:(二)MyBatis从入门到入土——开发一个Mybatis项目