1.5 HSQLDB数据库简介

MyBatis源码项目中使用HSQLDB的内存模式作为单元测试数据库,本节我们就来简单了解HSQLDB数据库的使用。

HSQLDB是纯Java语言编写的关系型数据库管理系统,支持大部分 SQL-92、SQL:2008、SQL:2011规范。它提供了一个小型的同时支持内存和磁盘存储表结构的数据库引擎,支持Server模式和内存模式两种运行模式。

HSQLDB的Server模式是把HSQLDB作为一个单独的数据库服务运行,类似于我们常用的关系型数据库,例如Oracle、MySQL等。而内存模式则是把HSQLDB嵌入应用进程中,这种模式只能存储应用内部数据。由于HSQLDB能够很好地支持JDBC规范,因此我们可以使用它作为Java语言与关系型数据库交互的测试工具。

接下来以一个案例介绍HSQLDB内存模式的使用。HSQLDB内存模式的特点是数据库所有信息都存放在内存中,当HSQLDB进程结束时,数据也会随之丢失,因此这种模式只适合做单元测试。我们需要在HSQLDB进程启动后,额外执行建表语句和数据初始化语句。

为了便于测试,笔者准备了两个SQL脚本文件,分别为create-table.sql和init-data.sql,内容如下:

如上面的代码所示,SQL脚本创建了一张user表,并向user表中初始化了一些数据,SQL脚本完整内容可参考本书随书源码mybatis-common项目中对应的文件。HSQLDB数据库的使用案例可参考本书随书源码的mybatis-chapter01项目。

这里我们使用Maven来管理依赖,需要在项目的pom.xml文件中增加HSQLDB的依赖,配置如下:

引入HSQLDB数据库依赖后,就可以在程序中访问HSQLDB数据库了,具体数据库操作代码如下:

如上面的代码所示,笔者使用JUIT4作为单元测试工具。为了便于测试,上面的代码中使用MyBatis提供的ScriptRunner工具类执行create-table.sql和init-data.sql两个文件中的SQL脚本,进行数据初始化操作。

MyBatis源码中提供了一个SqlRunner工具类,我们可以使用该工具类完成数据库的增删改查操作。在上面的案例中,笔者调用SqlRunner的selectAll()方法进行数据查询,返回一个List对象。我们对List中的元素进行遍历,输入结果如下:

可以看到,HSQLDB中的数据全部被查询了出来。HSQLDB内存模式的使用非常简单,只需要将HSQLDB的相关Jar包添加到项目的classpath中,然后在程序中加载HSQLDB数据库驱动即可。HSQLDB数据库的使用就介绍这么多,有兴趣的读者可以参考HSQLDB的官方文档。

MyBatis源码中提供了大量的单元测试用例,都使用了HSQLDB的内存模式,我们不需要额外安装其他数据库就可以运行MyBatis源码中的测试用例。

如图1-7所示,读者可以打开MyBatis源码中的ScriptRunnerTest单元测试类,然后在shouldRunScriptsUsingConnection()方法中打上断点,右击,选择Debug菜单项就可以进行源码的调试。

图1-7 运行MyBatis源码中的测试用例

注意

HSQLDB官方文档:http://hsqldb.org/doc/2.0/guide/index.html。

SQL-92官方文档:http://www.contrib.andrew.cmu.edu/~shadow/sql/sql1992.txt。