Spring Boot 2.x使用H2数据
引入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();
}