一切福田,不離方寸,從心而覓,感無不通。

SpringBoot集成H2数据库

前言

1、场景

在写DAO层的单元测试时,我们往往会遇到一个问题,测试用例所依赖的数据库数据被修改或删除了,或者在一个新的环境下所依赖的数据库不存在,导致单元测试无法通过。在这种情况下,使用H2内存数据库来模拟数据库环境是一个很好的解决方案。

2、H2 特点

  • 只有一个jar文件,适合作为嵌入式数据库使用
  • 支持标准SQL和JDBC
  • 可以用于单元测试,启动很快,每一个用例执行完会自动删除内存中的数据

 

上代码

使用maven工程来搭建测试环境,工程目录如下:

1、核心依赖

2、配置文件 application.yml

参数说明:

  • jdbc:h2:mem         使用h2的内存数据库,还有file等其它方式
  • xwj_db                   数据库名称
  • MODE=MySQL     以 MySQL 的模式运行

3、实体类

4、Repository

5、Service

 

测试

1、在 src/main/resources 目录下,创建一个目录 /db 和脚本文件 data.sql :

2、在 src/test/java 目录下,创建一个测试类:

3、测试 H2Test#testFind 方法,日志如下:

4、测试 H2Test#testInsertAndFind 方法,日志如下:

 

踩坑

1、在配置文件不要配置 schema,也不要直接将 schema.sql 脚本直接放在 src/main/resources 目录下,否则初始化数据脚本(即上面的data.sql)不会生效。

问题现象:执行方法的过程中没有任何报错,schema 和 data 脚本都会被执行(故意写错脚本会抛出异常)

问题原因:待进一步分析

 

from:https://www.cnblogs.com/xuwenjin/p/14829316.html