Spring3新功能之一是可以建立內嵌資料庫,便於開發者測試所用,目前支援HSQL、H2和Apache的Derby,預設是HSQL。習於Maven的我,至少要在pom.xml加入這個dependency吧!
<dependency> |
Spring3的官方文件有講可以這麼做,其applicationContext.xml如下:
<jdbc:embedded-database id="dataSource"> |
而Java code可以這麼做:
EmbeddedDatabaseBuilder builder = new EmbeddedDatabaseBuilder(); |
可是一來我討厭配置config檔,因為官方文件的xml只列部份,不讓我copy,<jdbc:embedded>標籤是不是要引入什麼DTD或Schema不得而知,二來官方文件寫,Embedded Database也有預設使用方式,所以就踹它原汁原味的部份。
幾經失敗,終知道怎麼料理了。因為是用JUnit測試,是故要在Maven預設目錄的/src/test/resources下放兩個SQL Script檔,檔名預設為schema.sql和data.sql,望名生義即知前者在create data,後者增改刪。是故找到HSQL的語法如下:
schema.sql內容: CREATE MEMORY TABLE FOO(ID INTEGER NOT NULL PRIMARY KEY, NAME VARCHAR(25)) data.sql內容: INSERT INTO FOO VALUES(1, 'Jemmy') |
如此一來,EmbeddedDatabaseBuilder在預設情況下會找到它們當作預設的HSQL用的Script來建資料,是故在JUnit source code如下:
import org.junit.After; public class TestEmbedDB { |
如此完全零配置,EmbeddedDatabase被build出來後,可以當作JdbcTemplate的建構子,這樣要玩JDBC、DAO就方便多了。預設建立的JDBC URL是jdbc:hsqldb:mem:testdb,也就是DB Name是testdb,而mem則表示為記憶體(內存)資料庫。
留言列表