项目源代码在: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=

参数解析:

  1. driver这里我用的时log4jdbc这个项目,可以方便的打印出带全部参数的sql
  2. jdbc:h2:mem 意思使用h2的内存数据库版本,还可以有file等各种方式
  3. test连接的数据库名称
  4. MODE=MySql 以mysql的模式运行
  5. 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数据库的更多相关文章

  1. Spring Boot集成H2数据库

    需求 平时学习的时候,涉及到一些连接数据库相关的操作,经常需要初始化本地数据库,比如装个MySQL,初始化一些脚本,比较麻烦,H2是内存数据库,Spring Boot可以在应用启动的时候对H2数据库初 ...

  2. 2018-08-20 中文代码之Spring Boot集成H2内存数据库

    续前文: 中文代码之Spring Boot添加基本日志, 源码库地址相同. 鉴于此项目中的数据总量不大(即使万条词条也在1MB之内), 当前选择轻量级而且配置简单易于部署的H2内存数据库比较合理. 此 ...

  3. 2018-08-24 中文代码之Spring Boot对H2数据库简单查询

    续前文: 中文代码之Spring Boot集成H2内存数据库 在词条中添加英文术语域: @Entity public class 词条 { @Id private long id; private S ...

  4. 中文代码之Spring Boot集成H2内存数据库

    续前文: 中文代码之Spring Boot添加基本日志, 源码库地址相同. 鉴于此项目中的数据总量不大(即使万条词条也在1MB之内), 当前选择轻量级而且配置简单易于部署的H2内存数据库比较合理. 此 ...

  5. Spring+Redis集成+关系型数据库持久化

    本篇文章主要介绍了"Spring+Redis集成+关系型数据库持久化",主要涉及到Spring+Redis集成+关系型数据库持久化方面的内容,对于Spring+Redis集成+关系 ...

  6. spring boot2.x中集成H2数据库

    H2数据库介绍  查看 在spring boot中集成 1.添加依赖 <dependency> <groupId>org.springframework.boot</gr ...

  7. spring boot整合H2数据库

    一.背景: .H2数据库是一个开源的关系型数据库.H2是一个嵌入式数据库引擎,采用java语言编写,不受 平台的限制,同时支持网络版和嵌入式版本,有比较好的兼容性,支持相当标准的sql标准,支持集群. ...

  8. Spring - 周边设施 - H2 数据库启动时写入数据

    1. 概述 之前讲到了 H2 的引入 这下我想说说 H2 启动时的 数据导入 2. 场景 需求 启动项目后, H2 启动起来 环境数据会自动注入 H2 数据库 可以验证是否成功 3. 环境 os wi ...

  9. spring boot 集成 mybatis,数据库为mysql

    导入mven工程即可运行,方法不描述了,具体见 https://github.com/davidwang456/spring-boot-mybatis-demo

随机推荐

  1. HttpWebRequest类,及如何使用Cookie(转载)

    HttpWebRequest类与HttpRequest类的区别.HttpRequest类的对象用于服务器端,获取客户端传来的请求的信息,包括HTTP报文传送过来的所有信息.而HttpWebReques ...

  2. WebSocket的原理,以及和Http的关系 (转载)

    一.WebSocket是HTML5中的协议,支持持久连接:而Http协议不支持持久连接. 首先HTMl5指的是一系列新的API,或者说新规范,新技术.WebSocket是HTML5中新协议.新API. ...

  3. PHP介绍(PHP入门1)

    BS架构和CS架构 B:Browser:浏览器 S:Server:服务器 C:Client:客户端 BS 浏览器和服务器的关系,通过浏览器来访问服务器,比如:百度.新浪... 优点:只要有浏览器就能访 ...

  4. GoBelieve service部署常见问题总结

    问题1: 大家好,我按照文档的步骤编译im时(make install),出现 can't load package: package main: app_route.go:1:1: expected ...

  5. Notes 20180507 : Java程序设计之环境搭建与HelloWord

    3 HelloWorld 不管从事什么工作那么一个工作环境总是必不可少的,那怕你只是要写篇文章,一张平坦的书桌和流利的书写笔总是能帮助我们完成工作的,Java开发更是如此.在开始今天的HelloWor ...

  6. js基础(闭包实例)

    1,常用发送短信的闭包实现: function sms() { var count = 60; return { start: function() { if(count == 0) { count ...

  7. Windows 安装 MySQL 8.0.11

    下载并解压 从官方网站下载最新安装包 解压到目标安装目录 新建配置文件 在安装目录新建my.ini文件 添加如下内容(需修改为自己的配置) #----------------------------- ...

  8. MySQL:如何导入导出数据表和如何清空有外建关联的数据表

    1.导入导出 导入数据库:前提:数据库和数据表要存在(已经被创建) (1)将数据表 test_user.sql 导入到test 数据库的test_user 表中 [root@test ~]# mysq ...

  9. Laravel源码解析--看看Lumen到底比Laravel轻在哪里

    在前面一篇<Laravel源码解析--Laravel生命周期详解>中我们利用xdebug详细了解了下Laravel一次请求中到底做了哪些处理.今天我们跟 Lumen 对比下,看看 Lume ...

  10. Delphi的FIFO实现

    FIFO主要用于多个不同线程或进程之间数据交换时做缓冲区用,尤其适合实时数据通讯应用中的数据缓冲,接收线程(进程)将数据写入FIFO,处理线程(进程)从FIFO取出数据 本单元中: TMemoryFI ...