从sql文件H2数据库spring boot插入数据

0 h2 spring-data-jpa spring-boot

我正在尝试使用 h2 数据库和 spring boot 从 sql 文件插入数据。当我将sql文件添加到中时src/main/ressources,我成功创建了表并向其中插入数据。但是当我创建一个名为 Employee 的模型类来引用该表时,我可以创建表,但没有插入任何行。

SQL 文件:

CREATE TABLE employees (   id INT AUTO_INCREMENT  PRIMARY KEY,  
first_name VARCHAR(250) NOT NULL,   last_name VARCHAR(250) NOT NULL,  
mail VARCHAR(250) NOT NULL,   password VARCHAR(250) NOT NULL ); 
INSERT INTO employees (first_name, last_name, mail, password) VALUES  
 ('Laurent', 'GINA', 'laurentgina@mail.com', 'laurent');
Run Code Online (Sandbox Code Playgroud)

模型:

import javax.persistence.Column; import javax.persistence.Entity;
import javax.persistence.GeneratedValue; import
javax.persistence.GenerationType; import javax.persistence.Id; import
javax.persistence.Table;
 
import lombok.Data;
 
@Data @Entity @Table(name = "employees")
 
public class Employee {
    
    @Id     @GeneratedValue(strategy = GenerationType.IDENTITY)     
    private Long id;        
    @Column(name="first_name")  
    private String first_name;
    @Column(name="last_name")   
    private String last_name;   
    private String mail;    
    private String password;    

}
Run Code Online (Sandbox Code Playgroud)

应用程序属性

#Global configuration
spring.application.name=api

#Tomcat configuration
server.port=9000

#Log level configuration
logging.level.root=ERROR
logging.level.com.openclassrooms=INFO
logging.level.org.springframework.boot.autoconfigure.h2=INFO
logging.level.org.springframework.boot.web.embedded.tomcat=INFO

#H2 Configuration
spring.h2.console.enabled=true
Run Code Online (Sandbox Code Playgroud)

小智 5

使用spring boot初始化数据库的方式有很多种:

  1. 使用 JPA 初始化数据库
  2. 使用 Hibernate 初始化数据库
  3. 使用基本 SQL 脚本初始化数据库

供您参考:您应该将模式数据分开,因此您应该有两个基本脚本:

  • schema.sql:在此文件中,您可以放置​​创建表的指令。

     CREATE TABLE employees ( id INT AUTO_INCREMENT PRIMARY KEY,first_name VARCHAR(250) NOT NULL, last_name VARCHAR(250) NOT NULL,mail VARCHAR(250) NOT NULL, password VARCHAR(250) NOT NULL );
    
    Run Code Online (Sandbox Code Playgroud)
  • data.sql:在此文件中,您可以放置​​插入数据的指令

     INSERT INTO employees (first_name, last_name, mail, password) VALUES ('Laurent', 'GINA', 'laurentgina@mail.com', 'laurent');
    
    Run Code Online (Sandbox Code Playgroud)
  • 如果您选择使用 schema.sql :您应该使用此属性spring.jpa.hibernate.ddl-auto=none

  • 否则(Hibernate)你应该使用这个属性 spring.jpa.hibernate.ddl-auto=create-drop

供你参考:

  • 注意:spring boot 版本 <= 2.4.x可以选择 Hibernate 创建 schema使用 schema.sql,但不能同时执行两者

  • 注意:spring boot 版本 >= 2.5.x 如果您希望基于脚本的 DataSource 初始化能够基于 Hibernate 执行的架构创建构建,请将spring.jpa.defer-datasource-initialization 设置为 true

请注意,这取决于您选择的版本! 在此输入图像描述