引入jar包:
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
</dependency>
<dependency>
<groupId>com.ninja-squad</groupId>
<artifactId>DbSetup</artifactId>
<version>2.0.0</version>
</dependency>
配置:
- 方式一:手動配置,在application.properties文件中增加如下配置,在db目錄下增加schema.sql(建表sql)和data.sql(數據insert)
spring.datasource.schema=classpath:db/schema.sql
spring.datasource.data=classpath:db/data.sql
- 方式二:自動配置,只需要在resources的更目錄下增加schema.sql語句,把建表和insert數據放在同一個文件即可,
這種方式的原理是:org.springframework.boot.autoconfigure.jdbc.DataSourceInitializer這個類會加載schema.sql文件,如果手動不配置的話那么就會默認使用classpath:schema.sql或者classpath:schema-all.sql。 - 這種在application.properties中使用schema.sql的方式必須要是內嵌數據庫,框架內部會判斷是否是內嵌數據庫,框架會對H2、Derby、hsql、hsqldb、none這5種形式對比,不是這5中就不會執行schema中的ddl和dml語句。
DROP TABLE IF EXISTS `smart_user`;
CREATE TABLE `smart_user`
(
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`name` varchar(32) DEFAULT NULL,
`password` varchar(32) DEFAULT NULL,
`version` bigint(20) DEFAULT NULL,
PRIMARY KEY (`id`)
);
INSERT INTO smart_user (`id`, `name`, `password`, `version`) VALUES (1, 'w.dehai', '123', 1);
INSERT INTO smart_user (`id`, `name`, `password`, `version`) VALUES (2, 'Jaedong', '123', 1);
-
說明:不需要配置url,name,password這些,系統會自動創建一個臨時數據,當然配置了也不會報錯
-
DAO層測試
@Resource
private DataSource dataSource;
@BeforeEach
void beforeEach() {
new DbSetup(new DataSourceDestination(dataSource), Operations.truncate("smart_user")).launch();
Insert insert = insertInto("smart_user")
.columns("id", "name", "password", "version")
.values(1L, "w.dehai", "123456", 1L)
.values(2L, "Jaedong", "1234", 1L).build();
new DbSetup(new DataSourceDestination(dataSource), insert).launch();
}
