MyBatis学习10之Mybatis整合spring


整合思路

  1. SqlSessionFactory对象应该放到spring容器中作为单例存在。

  2. 传统dao开发方式中,应该从spring容器中获得sqlSession对象。

  3. Mapper代理形式中,应该从spring容器中直接获得sqlSession对象。

  4. 数据库的连接以及数据库连接池事务管理都交给spring容器来完成。


一、整合需要的jar包?

  1. spring的jar包
  2. Mybatis的jar包
  3. Spring+Mybatis的jar包
  4. Mysql的数据库驱动jar包
  5. 数据库连接池的jar包

二、整合步骤

问题引入

在这里插入图片描述
如上图所示,我们每次调用一次都会先创建sqlSessi工厂,然后通过工厂取拿配置文件。如果加上spring工厂,就不需要这么做,只需要spring工厂统一管理即可。具体整合过程入下面步骤所示:

1.创建一个名字为spring_mybatis的maven工程

2.在pom中把写入需要的jar包

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.pp</groupId>
    <artifactId>spring_mybatis</artifactId>
    <version>1.0-SNAPSHOT</version>
    <dependencies>
        <!--mybatis需要的jar包-->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.1.1</version>
        </dependency>

        <!--mybatis和spring的整合包-->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis-spring</artifactId>
            <version>1.2.2</version>
        </dependency>
        <!--连接池-->
        <dependency>
            <groupId>commons-dbcp</groupId>
            <artifactId>commons-dbcp</artifactId>
            <version>1.4</version>
        </dependency>

        <!--mysql驱动包-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.44</version>
        </dependency>
        <!--测试的包-->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
        </dependency>

        <!--spring相关的包-->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-core</artifactId>
            <version>4.3.5.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>4.3.5.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-aop</artifactId>
            <version>4.3.5.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.aspectj</groupId>
            <artifactId>aspectjweaver</artifactId>
            <version>1.8.9</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-test</artifactId>
            <version>4.3.5.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-jdbc</artifactId>
            <version>4.3.5.RELEASE</version>
        </dependency>
    </dependencies>
    <build>
        <resources>
            <resource>
                <directory>src/main/java</directory>
                <includes>
                    <include>**/*.xml</include>
                </includes>
                <filtering>true</filtering>
            </resource>
            <resource>
                <directory>src/main/resources</directory>
                <includes>
                    <include>**/*.xml</include>
                    <include>**/*.properties</include>
                </includes>
            </resource>
        </resources>
    </build>

</project>

3.我们把前面的资源文件都一一复制到新建的项目中的resource包下。

  1. applicationContext.xml文件内容
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:p="http://www.springframework.org/schema/p"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:aop="http://www.springframework.org/schema/aop"
       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
        http://www.springframework.org/schema/aop
        http://www.springframework.org/schema/aop/spring-aop.xsd
">
    
</bean>
  1. db.properties内容
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/mybatis?characterEncoding=utf-8
jdbc.username=root
jdbc.password=123
  1. 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>
    
    
</configuration>

4.把第一天Mybatis学习的代码放入本次项目的com包里面

在这里插入图片描述
如图,找到mybatisday1代码下的com包,然后复制到我们新建的mybatis_spring项目文件下的src/main/java下面j即可.

注意:这里虽然把东西拿过来了,但不一定用,后期可能还会删除。

5.开启注解驱动

如果想让所有的东西都应该被spring所管理,所以我们第一步是进行开启注解驱动
代码如下(示例):

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:p="http://www.springframework.org/schema/p"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:aop="http://www.springframework.org/schema/aop"
       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
        http://www.springframework.org/schema/aop
        http://www.springframework.org/schema/aop/spring-aop.xsd
">
    <!--注解扫描-->
    <context:property-placeholder location="classpath:db.properties"/>
    <context:component-scan base-package="com.pp"/>
    
    <!--这里没有使用spring的连接数据库方法,而是使用commons-dbcp包的连接池连接-->
   <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}" />
    </bean>

    <!--管理会话工厂-->
    <bean id="sessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <!--依赖注入-->
        <property name="configLocation" value="classpath:SqlMapConfig.xml"/>
        <property name="dataSource" ref="dataSource"/>
    </bean>
    
    <bean  class="org.mybatis.spring.mapper.MapperScannerConfigurer">
         <property name="basePackage" value="com.pp.dao"/>
    </bean>
</beans>
  1. 第一个模块 内容是<context>里面内容的意思是管理com.pp包下的所有文件,这样的话om.pp包下面的类进行spring注解,都能被这个配置文件所管理。另外 一个是将db.properties文件的内容读取,方便该页面使用。
  2. 第二个模块 数据库的连接,这里的id值这个<bean>名字,class内容是使用类的具体路径,这里使用的是commons-dbcpjar包的数据库连接,destroy-method=close意思是关闭的时候销毁。这个标签的<property>中的name是连接数据库的各个参数,有driverClassName、url、username、password等,后面的value是通过第一个模块扫描的db.properties文件中取的参数,然后用${参数}传递值到里面。
  3. 第三个模块 是会话工厂的管理,在mybatis中每次都要创建会话工厂才能使用数据库的数据的读取,在整合后,有mybatis-spring整合包的SqlSessionFactoryBean类管理。这里的<bean>id为sessionFactory,class的路径是org.mybatis.spring.SqlSessionFactoryBean。除了创建会话工厂,还需要会话工厂取读取SqlMapConfig.xml的mybatis核心文件内容。所以这里需要依赖注入,在该<bean>下使用<property>标签,id为configLocation,value写SqlMapConfig.xml的地址,这里写classpath:SqlMapConfig.xml。同时,这里还需要调用数据库,所以需要将第二个模块的配置也引用过来。所以还需要添加一个property,id为dataSource,ref填写上面数据库配置时使用的id,这样就可以连接到上面的数据库配置了。
  4. 第四个模块 用来管理XXXMapper.xml文件的配置,所以这里也是用的mybatis-spring整合包,使用相关的类路径为org.mybatis.spring.mapper.MapperScannerConfigurer。里面的property的name写的是basePackage,value写XXXMapper.xml所在的路径,这里是com.pp.dao包下。

6.配置SqlMapperConfig.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="com.pp.pojo"/>
    </typeAliases>

    <mappers>
        <package name="com.pp.dao"/>
    </mappers>
</configuration>
  1. 因为前面数据库连接已经交给了spring管理,所以这里可以把数据库连接的内容全部清楚,但是这里需要一个新的东西,指向实体类所对应的包名。即<typeAliases>下面的
    <package>中的name写上实体类对应的包名com.pp.pojo。
  2. <mapper>里面不需要指向具体的XXXMapper.xml具体文件,只需要给个路径就可以了。这里的<package>中的name写的是com.pp.dao。

三、编写测试类命名Demo

import java.util.List;

public class Demo {
    private ApplicationContext applicationContext;

    @Test
    @Before
    public void setUP(){
        applicationContext=new ClassPathXmlApplicationContext("classpath:applicationContext.xml");
    }
   /* @Test
    public void fun(){
        UserMapper userMapper = (UserMapper)applicationContext.getBean("userMapper");
        User user = userMapper.findUserByid(1);
        System.out.println(user);
    }*/
  1. 第一步先加载spring的核心配置文件,所以需要创建一个ApplicationContext对象,然后让该对象读取我们这里的spring核心配置文件applicationContext.xml。setUP()函数的内容就是读取核心配置文件,并且注解了@Test、@Before所以在运行其他测试方法是,这个setUP()方法会优先执行。
  2. 第二步读取配置文件后,然后利用getBean()方法去UserMapper类,这里需要小写所以为userMapper;这样就通过工厂实例化了一个UserMapper对象,但是这里会返回一个Object对象,所以需要转化成UserMapper类型。
  3. 第三步:调用该类的下面的方法,最后输出即可。

总结

提示:这里对文章进行总结:
本次主要讲解的是将

  1. MyBatis学习2之入门案例学习的mybatisday1j进行与spring的整合,整合过程是首先需要把mybatis需要的jar包导入还有spring相关的jar包进行导入,然后就是一个mybatis-spring的整合包,初次之外还需要连接数据库的mysql驱动包以及数据库连接池的包commons-dbcp。
  2. 在spring的配置文件中,先把数据库连接内容信息文件也就是db.properties文件加载进来,然后就是要加载java文件的包,是该配置文件能够管理项目下的类。
  3. 对数据库进行连接,为了方便管理数据库连接的操作需要从db.properties中将数据库的信息进行读取出来。
  4. mybatis操作数据库需要会话工厂,所以spring将会话工厂管理起来,然后去读取mybatis的核心配置文件SqlMapperConfig.xml.
  5. spring还需要管理XXXMapper.xml配置文件,直接指向该配置文件所在的包路径即可
  6. SqlMapper.xml文件中,需要<typeAliases>指向实体类的包路径,需要<mappers>指向mapper文件的包路径。

*源码地址:https://gitee.com/yangforever/project-learning/tree/master/demo/Mybatis/mybatisday3/spring_mybatis

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值