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();
    }
posted @ 2020-09-09 15:38  神一样的存在  阅读(1184)  评论(0编辑  收藏  举报