![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=1738868940-fYwbmzyayVXSTu4xsoV1OEEuZXvMRg84-0-9c7dd67c0bf6905749879eb31904b558)
如上面的代码所示,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=1738868940-D7ZtWv46JjNeBNtiJ8W4IrtVLDU93BD7-0-657b80fec47905f5b859a72809f0f104)
![](https://epubservercos.yuewen.com/898509/15825993104147706/epubprivate/OEBPS/Images/Figure-P21_2670.jpg?sign=1738868940-hnPCVsDDal53ZPx4YMOnom3ypBwB8OIQ-0-41ff8c08a3632a3ba60ddbdac7b3a23f)
引入HSQLDB数据库依赖后,就可以在程序中访问HSQLDB数据库了,具体数据库操作代码如下:
![](https://epubservercos.yuewen.com/898509/15825993104147706/epubprivate/OEBPS/Images/Figure-P21_6931.jpg?sign=1738868940-hydFxFTaAf6bXA8RoOIc0a8VBGhWwQf5-0-bdd25bf430b66d4f8a37fe299c7716b2)
如上面的代码所示,笔者使用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=1738868940-jymyO46fuAJYfKFIiRwzGmpEEZkZifZH-0-94aa3a5ad4bcf3213fbc773839fbfcf4)
可以看到,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=1738868940-lwu6VOERHXBkWI36vebCygDy9G1x3c01-0-3b1af3bf057ed800506654d9756cddd0)
图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。