首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

H2数据库及 DAO 单元测试

简介

H2是一个开源的嵌入式数据库引擎,采用java语言编写,不受平台的限制,同时H2提供了一个十分方便的web控制台用于操作和管理数据库内容。

为什么使用H2?

方便开发

H2数据库可以作为一个嵌入式的数据库使用,在开发环境种使用非常方便。不像MySQL等数据库需要专门启动一个数据库服务,并做相关配置。可以大大减少开发时的环境配置成本。

方便测试

H2数据库可以作为单元测试种使用的数据库。和第一点类似,利用H2数据的嵌入式的特点,在单元测试种使用该数据库将大大的降低配置成本

方便部署

即使是在生产环境中,我也非常非常推荐使用H2。因为该数据库真的是非常的轻便,非常有利于程序的发布。过去如果使用MySQL这种数据库,在发布前还需要先将MySQL服务器开启,并建立相关db。而使用H2,你几乎可以完全忽略这些过程。程序发布的过程,你只需要集中在将程序运行起来即可。

性能不错

H2在一定程度上,性能完全不弱于MySQL。如果你的程序的用户不超过1w,那么我觉得H2在性能上完全可以和MySQL媲美。至于更大的数据量和用户数是否能够满足需求,我也不知道。对于初创产品而言,我觉得H2在性能上绝对已经满足开发者的需求了。

只需要很少的资源

目前如果在要服务器上运行起MySQL服务,那么内存就会占据约500mb。如果你的服务器只有1g的内存,那么随着程序运行,MySQL会占据更多的资源,接着就会导致资源不够使用,MySQL服务被关闭。而使用H2就完成没有这样的问题。H2占据的资源非常的少,几乎不会被你察觉。

H2的连接模式

Embedded mode (local connections using JDBC)

Server mode (remote connections using JDBC or ODBC over TCP/IP)

Mixed mode (local and remote connections at the same time)

Embedded Mode

嵌入模式:在该模式下,程序会直接连接数据库,访问数据库文件。该模式的运行效率是最高的。

特点:该模式虽然效率最高,但是在该模式下数据库将只有当前程序可以访问,其他程序是不能访问数据库的。

连接使用的 URL:

Server Mode

服务模式::在该模式下,数据库将会运行在一个数据库连接服务上。程序通过访问数据库连接服务访问数据库。

特点:该模式的性能不如嵌入模式,但是他可以支持多个程序访问数据库。

连接使用的 URL:

Mixed Mode

混合模式:该模式,集合了嵌入模式和服务模式的优点。他使得数据库性能和嵌入模式一样,同时又支出多个程序一同连接。

背后实现:如果你是第一个连接该数据库的程序,那么你相当于是用嵌入模式连接数据库。如果你是第二个或者之后连接的数据库,那么你就相当于是用服务模式连接的数据库。

连接使用的 URL:

使用 H2

通过管理页面使用 H2

H2 shell 模式

H2 WEB Console

使用 JDBC API 访问

使用连接池 JdbcConnectionPool

H2 内部有内建有连接池Mini Connection Pool Manager。H2从内艰的连接池中获取 Connection是 DriverManager.getConnection()的2倍。

经过调查,目前在线上环境使用 H2 数据库的几乎没有。H2 现在应用比较广泛的场景是拿来做DAO 层的单元测试。

使用 H2 进行单元测试,环境搭建

Maven 依赖

Author 实体类

Mapper 接口

在 test/resurces 目录先新建 h2目录,新建schema.sql,data_prepare.sql 文件,前者用于创建 Schema,后者用户创建数据库中的表数据。内容如下:

在test/resources 目录下建立config目录,新建source.properties

现在使用的 Spring Boot,所以去掉了所有的 XML 文件,在传统 Spring 的环境下使用下面的 XML 进行 DataSource 的配置

在 Spring Boot中通过@Bean注解进行配置

最后执行我们的单元测试

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180125G003MC00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券