spring boot + mybatis + h2 配置 + 源码

开发需要写单测,遇到持久化测试的场景。如果用 MySQL 或者其他本地数据库,等项目迁移后需要重新配置数据库,很麻烦。更难以接受的是 单测时 MySQL 不会回滚数据,这导致单测跑完,数据库里存了一堆数据。手动不清空可能会影响到下次测试,更有甚者是在一次测试中,前后两个单测相互影响,跑挂了测试。

如果采用内存数据库,就可以避免上述的问题。之前配置过,结果忘得差不多了。这次因为其他需求,要在搞一遍,顺带这记录下配置细节。

1、源码

demo

2、 添加依赖

compile group: 'com.h2database', name: 'h2', version: '1.4.200'

3、配置 H2

# H2
spring.h2.console.enabled=true
spring.h2.console.path=/h2-console
# Datasource
spring.datasource.url=jdbc:h2:mem:testdb
spring.datasource.driverClassName=org.h2.Driver
spring.datasource.username=sa
spring.datasource.password=
spring.jpa.database-platform=org.hibernate.dialect.H2Dialect

4、创建表并插入几条记录

在 Spring Boot 项目的 resource 路径下,创建两个文件: data.sqlschema.sql。项目启动时,会自动加载这两张表里的数据。

-- schema.sql

create table users
(
   name varchar(255) not null,
   password varchar(255) not null,
   PRIMARY KEY(name)
);
-- data.sql

insert into users
values('Aseem', '1234');

insert into users
values('Firdous', '5678');

insert into users
values('diego', '123');

5、测试 H2 配置效果

H2 的配置工作到这里就做完了。项目启动后,h2自动创建 users 表和插入三条记录。

测试下:

在浏览器中输入:http://localhost:8080/h2-console

spring boot + mybatis + h2 配置 + 源码

点击连接

spring boot + mybatis + h2 配置 + 源码

6、mybatis 的配置

顺便也记录下吧。

6.1 依赖

这里要加两个,一个用在测试中,另一个用在生产环境中。

implementation 'org.mybatis.spring.boot:mybatis-spring-boot-starter:2.1.0'
    testCompile group: 'org.mybatis.spring.boot', name: 'mybatis-spring-boot-starter-test', version: '2.1.3'

6.2 配置

application.properties

# 声明 mybatis 的配置文件位置。
mybatis.config-location=classpath:mybatis-config.xml
# 声明 mybatis 所有的 XXXMapper.xml 所在位置。
mybatis.mapper-locations=classpath:mapper/*.xml

mybatis-config.xml。如果没有定义 handler,下面的内容可以直接复制。

<?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>
  <settings>
    <!-- Globally enables or disables any caches configured in any mapper under this configuration -->
    <setting name="cacheEnabled" value="true"/>
    <!-- Sets the numfindByNamer of seconds the driver will wait for a response from the database -->
    <setting name="defaultStatementTimeout" value="3000"/>
    <!-- Enables automatic mapping from classic database column names A_COLUMN to camel case classic Java property names aColumn -->
    <setting name="mapUnderscoreToCamelCase" value="true"/>
    <!--<setting name="logImpl" value="STDOUT_LOGGING"/>-->
    <!-- Allows JDBC support for generated keys. A compatible driver is required.
    This setting forces generated keys to be used if set to true,
     as some drivers deny compatibility but still work -->
    <setting name="useGeneratedKeys" value="true"/>
  </settings>

  <!-- Continue going here -->

</configuration>

6.3 单测

import com.example.h2.domain.User;
import com.example.h2.domain.UserRepository;
import java.util.Optional;
import org.junit.jupiter.api.Test;
import org.mybatis.spring.boot.test.autoconfigure.MybatisTest;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Import;

@MybatisTest
@Import(MybatisUserRepository.class)
class MybatisUserRepositoryTest {

  @Autowired
  private UserRepository userRepository;

  @Test
  public void should_get_user_succeed(){
    Optional<User> optional = userRepository.ofId("diego");
    assertThat(optional.isPresent(),is(true));

    User fetched = optional.get();
    assertThat(fetched.getName(),is("diego"));
    assertThat(fetched.getPassword(),is("123"));
  }

}
上一篇:数据结构学习--第3章(2)


下一篇:HTML测试