Spring整合Mybatis的记录文

概述

距上次写了关于spring mvc的文章之后,学习了一个星期的mybatis,终于可以着手整合一下,编写项目.撰写一篇整合记录文.

Mybatis配置

首先需要引入以下四个包,分别是:数据库连接池/mysql驱动/mybatis/mybatis-spring.

     <dependency>
        <groupId>com.mchange</groupId>
        <artifactId>c3p0</artifactId>
        <version>0.9.5.2</version>
    </dependency>
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>5.1.46</version>
    </dependency>
    <dependency>
    <dependency>
        <groupId>org.mybatis</groupId>
        <artifactId>mybatis</artifactId>
        <version>3.5.2</version>
    </dependency>
    <dependency>
        <groupId>org.mybatis</groupId>
        <artifactId>mybatis-spring</artifactId>
        <version>2.0.2</version>
    </dependency>

数据库连接池与xml配置

一步步的来剖析,什么是数据库连接池呢? 一般情况下我们正常使用数据库连接每次连接关闭都是很消耗数据库资源的.

而当我们采用数据库连接池之后,将统一管理几个连接,当一个"用户" 请求调用数据库的时候,我们从连接池中拿出一个,当用户使用完毕,再将这个连接返还给连接池.

注意: 此次流程结束之后,这个连接并不会关闭,而是交给连接池管理,等待下一个 "用户" 进行使用. 因此,这样可以减少很多的不必要性能损耗!

首先,需要明确.我们使用mybatis的第一步必然是连接数据库. 然后通过返回的sqlSession,才能进行操作!

前面学习mybatis的时候,知道了它的流程:

  • 通过数据库配置信息进行连接,然后创建一个sqlSeesionFactory(工厂).
  • 通过 sqlSeesionFactory 获得连接.
  • 通过连接获得sqlSesion,进行CRUD.

那么思路就很清晰了.

 <!--1. 引入数据库配置-->
<context:property-placeholder location="classpath:database.properties"/>

<!--2. 使用c3p0数据库连接池-->
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
    <property name="driverClass" value="${jdbc.driver}"/>
    <property name="jdbcUrl" value="${jdbc.url}"/>
    <property name="user" value="${jdbc.username}"/>
    <property name="password" value="${jdbc.password}"/>
    <property name="maxPoolSize" value="30"/>
    <property name="minPoolSize" value="10"/>
    <property name="autoCommitOnClose" value="false"/>
    <property name="checkoutTimeout" value="10000"/>
    <property name="acquireRetryAttempts" value="2"/>

</bean>

<!--2. 创建sqlSession工厂-->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
    <property name="dataSource" ref="dataSource"/>
    <property name="configLocation" value="classpath:Mybatis-config.xml"/>
</bean>

上面创建sqlSession工厂的时候会读取mybatis的核心配置文件.

<?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.kum.pojo"/>
    </typeAliases>

    <mappers>
        <mapper resource="mapper/RecordMapper.xml"/>
    </mappers>

</configuration>

由于连接与工程的创建迁移到前面的配置中了,所以这里只是简单的注册了别名与mapper.

而到这一步我们应该思考的事情就是,那么如何得到sqlSeesion呢? 我们之前都是通过工程类来拿到session,这次我们直接将它托管给了spring,流程完全变化了!

答案是,我们并不需要思考如何拿到sqlsession.. 我们拿这个的目的是获取到我们想使用的mapper.所以我们只需要注册一个 MapperScannerConfigurer 它就可以把我们所有的mapper托管给spring... 我们只需要直接使用获得bean的方式就可以了!

注意: 这里自动装配的是 basePackage 中填写的路径.

    <!--3. 使用 MapperScannerConfigurer 实现自动装配-->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
    <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/>
    <property name="basePackage" value="com.kum.dao"/>
</bean>

自此,mybatis的配置就完毕了~

这里我们直接测试一下就知道是否连接成功了~

@Test
public void test(){
    ApplicationContext Context = new ClassPathXmlApplicationContext("applicationContext.xml");
    RecordServiceImpl service = Context.getBean("recordServiceImpl", RecordServiceImpl.class);
    List<Record> allRecord = service.getAllRecord();
    for (Record record : allRecord) {
        System.out.println(record);
    }
}

结果自然是成功啦.
Snipaste_2020-04-27_16-13-15.png

下面配置Spring MVC相关的就不再阐述啦. Spring MVC 这篇文章有记录~

而在Controller中,我们直接使用Autowired自动装配注解就可以拿到对应的mapper了...

前面忘记叙述,这个 recordServiceImpl 是编写的对应mapper的实现类~ 其实就是调用mapper的方法.

@Autowired
@Qualifier("recordServiceImpl")
private RecordServiceImpl recordService;
@GetMapping(value = "/getAllRecord",produces = "text/html;charset=UTF-8")
public String getAllRecord(){
    List<Record> allRecord = recordService.getAllRecord();
    return JSON.toJSONString(allRecord);
}