Spring单元测试集成H2数据库
项目源代码在:Spring-H2测试
H2简介
H2数据库是一种由Java编写的,极小,速度极快,可嵌入式的数据库。非常适合用在单元测试等数据不需要保存的场景下面。
以下时其官网的介绍:
{% blockquote h2 http://www.h2database.com/html/main.html h2 %}
Welcome to H2, the Java SQL database. The main features of H2 are:
Very fast, open source, JDBC API
Embedded and server modes; in-memory databases
Browser based Console application
Small footprint: around 1.5 MB jar file size
{% endblockquote %}
spring-data直连测试
我们使用的maven工程来搭建测试环境,工程目录如下:

代码里面数据库映射使用了spring-data 和 Hibernate实现,方便实现,避免自己写sql。
数据连接配置信息
jdbc.driver=net.sf.log4jdbc.DriverSpy
jdbc.url=jdbc:log4jdbc:h2:mem:test;MODE=MySql;DB_CLOSE_DELAY=-1
jdbc.username=sa
jdbc.password=
参数解析:
- driver这里我用的时log4jdbc这个项目,可以方便的打印出带全部参数的sql
- jdbc:h2:mem 意思使用h2的内存数据库版本,还可以有file等各种方式
- test连接的数据库名称
- MODE=MySql 以mysql的模式运行
- DB_CLOSE_DELAY=-1 关闭参数,延时关闭为代码退出时间。
测试用例:
@Test
public void testFindAll() {
List<User> list = (List<User>) userDao.findAll();
for (User user : list) {
System.out.println(user.toString());
}
}
执行结果:
17:45:37.582 [main] INFO o.s.jdbc.datasource.init.ScriptUtils - Executing SQL script from class path resource [db/sql/schema.sql]
17:45:37.587 [main] INFO jdbc.sqltiming - DROP TABLE IF EXISTS sys_user
{executed in 0 msec}
17:45:37.593 [main] INFO jdbc.sqltiming - CREATE TABLE sys_user ( id BIGINT NOT NULL, name VARCHAR(255), PRIMARY KEY (id) )
{executed in 5 msec}
17:45:37.594 [main] INFO o.s.jdbc.datasource.init.ScriptUtils - Executed SQL script from class path resource [db/sql/schema.sql] in 10 ms.
17:45:37.594 [main] INFO o.s.jdbc.datasource.init.ScriptUtils - Executing SQL script from class path resource [db/sql/import-data.sql]
17:45:37.596 [main] INFO jdbc.sqltiming - INSERT INTO sys_user (id, name) VALUES (1111, '张三')
{executed in 1 msec}
17:45:37.597 [main] INFO o.s.jdbc.datasource.init.ScriptUtils - Executed SQL script from class path resource [db/sql/import-data.sql] in 3 ms.
17:45:37.598 [main] INFO jdbc.connection - 2. Connection closed
17:45:37.756 [main] INFO jdbc.connection - 3. Connection opened
17:45:37.758 [main] INFO o.s.t.c.t.TransactionContext - Began transaction (1) for test context [DefaultTestContext@af9a89f testClass = UserDaoTest, testInstance = cn.lee.jason.repository.UserDaoTest@6482eef, testMethod = testFindAll@UserDaoTest, testException = [null], mergedContextConfiguration = [MergedContextConfiguration@2ab2710 testClass = UserDaoTest, locations = '{classpath:/applicationContext.xml}', classes = '{}', contextInitializerClasses = '[]', activeProfiles = '{test}', propertySourceLocations = '{}', propertySourceProperties = '{}', contextLoader = 'org.springframework.test.context.support.DelegatingSmartContextLoader', parent = [null]]]; transaction manager [org.springframework.orm.jpa.JpaTransactionManager@1fcf9739]; rollback [true]
17:45:37.879 [main] INFO jdbc.sqltiming - select user0_.id as id1_0_, user0_.name as name2_0_ from sys_user user0_
{executed in 0 msec}
User{id=1111, name='张三'}
17:45:37.906 [main] INFO jdbc.connection - 3. Connection closed
测试通过,H2搭建测试环境成功。
添加schema
2.0版本添加数据库跨库查询;
@Entity
@Table(name = "sys_user",schema = "sys")
public class User implements Serializable {
private Long id;
private String name;
//省略getter和setter方法
}
sql同时也要修改为:
CREATE SCHEMA IF NOT EXISTS sys;
DROP TABLE IF EXISTS sys.sys_user;
CREATE TABLE sys.sys_user (
id BIGINT NOT NULL,
name VARCHAR(255),
PRIMARY KEY (id)
)
INSERT INTO sys.sys_user (id, name) VALUES (1111, '张三');
jdbc连接的url不变。
执行测试用例,结果完全一致:
17:56:58.160 [main] INFO o.s.jdbc.datasource.init.ScriptUtils - Executing SQL script from class path resource [db/sql/schema.sql]
17:56:58.165 [main] INFO jdbc.sqltiming - CREATE SCHEMA IF NOT EXISTS sys
{executed in 0 msec}
17:56:58.165 [main] INFO jdbc.sqltiming - DROP TABLE IF EXISTS sys.sys_user
{executed in 0 msec}
17:56:58.170 [main] INFO jdbc.sqltiming - CREATE TABLE sys.sys_user ( id BIGINT NOT NULL, name VARCHAR(255), PRIMARY KEY (id) )
{executed in 4 msec}
17:56:58.170 [main] INFO o.s.jdbc.datasource.init.ScriptUtils - Executed SQL script from class path resource [db/sql/schema.sql] in 10 ms.
17:56:58.170 [main] INFO o.s.jdbc.datasource.init.ScriptUtils - Executing SQL script from class path resource [db/sql/import-data.sql]
17:56:58.172 [main] INFO jdbc.sqltiming - INSERT INTO sys.sys_user (id, name) VALUES (1111, '张三')
{executed in 1 msec}
17:56:58.172 [main] INFO o.s.jdbc.datasource.init.ScriptUtils - Executed SQL script from class path resource [db/sql/import-data.sql] in 2 ms.
17:56:58.318 [main] INFO o.s.t.c.t.TransactionContext - Began transaction (1) for test context [DefaultTestContext@af9a89f testClass = UserDaoTest, testInstance = cn.lee.jason.repository.UserDaoTest@6482eef, testMethod = testFindAll@UserDaoTest, testException = [null], mergedContextConfiguration = [MergedContextConfiguration@2ab2710 testClass = UserDaoTest, locations = '{classpath:/applicationContext.xml}', classes = '{}', contextInitializerClasses = '[]', activeProfiles = '{test}', propertySourceLocations = '{}', propertySourceProperties = '{}', contextLoader = 'org.springframework.test.context.support.DelegatingSmartContextLoader', parent = [null]]]; transaction manager [org.springframework.orm.jpa.JpaTransactionManager@1fcf9739]; rollback [true]
17:56:58.431 [main] INFO jdbc.sqltiming - select user0_.id as id1_0_, user0_.name as name2_0_ from sys.sys_user user0_
{executed in 1 msec}
User{id=1111, name='张三'}
17:56:58.451 [main] INFO jdbc.connection - 3. Connection closed
schema添加后,只需要将对应的创建表和语句对应修改即可。
Spring单元测试集成H2数据库的更多相关文章
- Spring Boot集成H2数据库
需求 平时学习的时候,涉及到一些连接数据库相关的操作,经常需要初始化本地数据库,比如装个MySQL,初始化一些脚本,比较麻烦,H2是内存数据库,Spring Boot可以在应用启动的时候对H2数据库初 ...
- 2018-08-20 中文代码之Spring Boot集成H2内存数据库
续前文: 中文代码之Spring Boot添加基本日志, 源码库地址相同. 鉴于此项目中的数据总量不大(即使万条词条也在1MB之内), 当前选择轻量级而且配置简单易于部署的H2内存数据库比较合理. 此 ...
- 2018-08-24 中文代码之Spring Boot对H2数据库简单查询
续前文: 中文代码之Spring Boot集成H2内存数据库 在词条中添加英文术语域: @Entity public class 词条 { @Id private long id; private S ...
- 中文代码之Spring Boot集成H2内存数据库
续前文: 中文代码之Spring Boot添加基本日志, 源码库地址相同. 鉴于此项目中的数据总量不大(即使万条词条也在1MB之内), 当前选择轻量级而且配置简单易于部署的H2内存数据库比较合理. 此 ...
- Spring+Redis集成+关系型数据库持久化
本篇文章主要介绍了"Spring+Redis集成+关系型数据库持久化",主要涉及到Spring+Redis集成+关系型数据库持久化方面的内容,对于Spring+Redis集成+关系 ...
- spring boot2.x中集成H2数据库
H2数据库介绍 查看 在spring boot中集成 1.添加依赖 <dependency> <groupId>org.springframework.boot</gr ...
- spring boot整合H2数据库
一.背景: .H2数据库是一个开源的关系型数据库.H2是一个嵌入式数据库引擎,采用java语言编写,不受 平台的限制,同时支持网络版和嵌入式版本,有比较好的兼容性,支持相当标准的sql标准,支持集群. ...
- Spring - 周边设施 - H2 数据库启动时写入数据
1. 概述 之前讲到了 H2 的引入 这下我想说说 H2 启动时的 数据导入 2. 场景 需求 启动项目后, H2 启动起来 环境数据会自动注入 H2 数据库 可以验证是否成功 3. 环境 os wi ...
- spring boot 集成 mybatis,数据库为mysql
导入mven工程即可运行,方法不描述了,具体见 https://github.com/davidwang456/spring-boot-mybatis-demo
随机推荐
- HDFS的Read过程分析
在hadoop中作为后端存储的文件系统HDFS发挥中重要的作用,HDFS是一个分布式文件系统,按照Google File System的思想开发的,针对的场景是低端服务器.写操作少而读操作多的情况.在 ...
- Linux Shell常用技巧(十)
二十. 通过管道组合Shell命令获取系统运行数据: 1. 输出当前系统中占用内存最多的5条命令: #1) 通过ps命令列出当前主机正在运行的所有进程. #2) 按照第五个字段基于数值 ...
- 杂记(那些我还容易混淆的c和c++知识)
1: 定义一个对象时先调用基类的构造函数.然后调用派生类的构造函数:析构的时候恰好相反:先调用派生类的析构函数.然后调用基类的析构函数.2: 多态性具体体现在运行和编译两个方面:在程序运行时的多态性 ...
- 用HTML编写漫威页面
<!DOCTYPE html><html><head lang="en"> <meta charset="UTF-8" ...
- paxos协议(1)-朴素paxos
前言 学习paxos协议,最困惑我的两点是: 1. 朴素paxos是怎么样的?这部分主要是原理: 2. paxos协议是怎么运用到分布式系统解决问题的.因为很多博客的开篇说paxos协议可以运用在很多 ...
- 关于使用iframe,父元素无法获得子iframe对的元素
首先确定自己写的方法对不对: $(document.getElementById('iframe的ID').contentWindow.document.body).find("要获得的元素 ...
- laychat聊天功能
windows版本:1.直接下载laychat聊天室压缩包,并解压到PHPstudy本地PHP环境中去:2.进入E:\PHPTutorial\WWW\laychat-master\vendor\Wor ...
- 基于STM32的简易数码相册
原理:在板子上插入SD卡,并使用FATFS文件系统来循环读取并显示SD卡内的指定目录内的所有BMP图片. 这是显示效果(能上传视频的话就能看到循环显示效果): 因为图片显示函数显示的是24位BMP图片 ...
- Python学习:18.Python异常处理
一.为什么使用异常处理 当程序运行的时候出现了异常,导致程序终止运行,为了解决这种情况,我们需要预先对可能出现的异常进行处理,一旦出现这种异常,就使用另一种方式解决问题,还有就是错误信息是使用者没有必 ...
- unix文件共享
UNIX系统支持在不同的进程间共享打开文件.内核使用3种数据结构表示打开文件,他们之间的关系决定了在文件共享方面一个进程对另一个进程产生的影响. (1)每个进程在进程表中都有一个记录项,记录项中包含一 ...