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();
    }


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM