![MyBatis 3源码深度解析](https://wfqqreader-1252317822.image.myqcloud.com/cover/388/27563388/b_27563388.jpg)
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,内容如下:
![](https://epubservercos.yuewen.com/898509/15825993104147706/epubprivate/OEBPS/Images/Figure-P20_6927.jpg?sign=1739286347-nK3B2Rz3H1o6x23F3qyFwAM2i658uawI-0-4e7287294e3bc753cbe2fb4404efac7f)
如上面的代码所示,SQL脚本创建了一张user表,并向user表中初始化了一些数据,SQL脚本完整内容可参考本书随书源码mybatis-common项目中对应的文件。HSQLDB数据库的使用案例可参考本书随书源码的mybatis-chapter01项目。
这里我们使用Maven来管理依赖,需要在项目的pom.xml文件中增加HSQLDB的依赖,配置如下:
![](https://epubservercos.yuewen.com/898509/15825993104147706/epubprivate/OEBPS/Images/Figure-P20_6929.jpg?sign=1739286347-TkTmmfd5X52D8nRKDv2fadNEHffsBlCI-0-a5e5c7132bba29cb52c62661c2134ba5)
![](https://epubservercos.yuewen.com/898509/15825993104147706/epubprivate/OEBPS/Images/Figure-P21_2670.jpg?sign=1739286347-Sp2HKkSXemI6ulsAV7DXiIsry9IjQntX-0-4af80e46558577a816c2304974e2ae7d)
引入HSQLDB数据库依赖后,就可以在程序中访问HSQLDB数据库了,具体数据库操作代码如下:
![](https://epubservercos.yuewen.com/898509/15825993104147706/epubprivate/OEBPS/Images/Figure-P21_6931.jpg?sign=1739286347-HhXEbJaVdqBNX7kItrPgV5JzWQSP1eu1-0-4e3e0e8087e14395e2cf192d5be24872)
如上面的代码所示,笔者使用JUIT4作为单元测试工具。为了便于测试,上面的代码中使用MyBatis提供的ScriptRunner工具类执行create-table.sql和init-data.sql两个文件中的SQL脚本,进行数据初始化操作。
MyBatis源码中提供了一个SqlRunner工具类,我们可以使用该工具类完成数据库的增删改查操作。在上面的案例中,笔者调用SqlRunner的selectAll()方法进行数据查询,返回一个List对象。我们对List中的元素进行遍历,输入结果如下:
![](https://epubservercos.yuewen.com/898509/15825993104147706/epubprivate/OEBPS/Images/Figure-P22_6932.jpg?sign=1739286347-UhSiupnlVtzjd0JPouvZiaOviKVM6c4O-0-6a279edee91c21997bc976ecc62a06d9)
可以看到,HSQLDB中的数据全部被查询了出来。HSQLDB内存模式的使用非常简单,只需要将HSQLDB的相关Jar包添加到项目的classpath中,然后在程序中加载HSQLDB数据库驱动即可。HSQLDB数据库的使用就介绍这么多,有兴趣的读者可以参考HSQLDB的官方文档。
MyBatis源码中提供了大量的单元测试用例,都使用了HSQLDB的内存模式,我们不需要额外安装其他数据库就可以运行MyBatis源码中的测试用例。
如图1-7所示,读者可以打开MyBatis源码中的ScriptRunnerTest单元测试类,然后在shouldRunScriptsUsingConnection()方法中打上断点,右击,选择Debug菜单项就可以进行源码的调试。
![](https://epubservercos.yuewen.com/898509/15825993104147706/epubprivate/OEBPS/Images/Figure-P22_2678.jpg?sign=1739286347-oGmUy7o2sthWkbT6ace0R25FkCvMHo5u-0-022b133f55d60ba251e4c905100053a5)
图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。