Spring Boot 2.x实战70 - Spring Data 14 - Spring Data JPA数据库结构初始化(hibernate正向生成、数据库脚本)

2.12 数据库初始化

2.12.1 数据库结构初始化

在Spring Boot下会根据我们的实体类的配置自动生成DDL(Data Definition Language数据定义语言,用来定义数据库结构),它可由下面两个外部配置属性开启(二选一):

spring.jpa.generate-ddl: true

是否在启动时初始化数据库结构。

spring.jpa.hibernate.ddl-auto: create

相对于上一种配置方式,更倾向使用这里hibernate提供的配置,它提供更细粒度的配置。
该配置一共有5项可选:

  • none:关闭DDL处理;
  • validate:验证数据库结构,对数据库没有改变;
  • update:如果需要更新数据库结构;
  • create:创建数据库结构并销毁以前的数据;
  • create-drop:创建数据库结构并在会话关闭后销毁结构。

在使用内嵌数据库时,默认为create-drop;其他情况下默认为none

2.12.2 脚本初始化

DataSourceAutoConfiguration还为我们提供了使用sql脚本来初始化数据库的功能。Spring Boot会自动处理根类路径位置的schema.sqldata.sql,还可以根据spring.datasource.platform定义的platform自动处理schema-${platform}.sqldata-${platform}.sqlplatform可使用数据库品牌hsqldb, h2, oracle, mysql, postgresql等。

我们使用schema.sql来存放DDL(CREATE、ALTER、DROP),使用data.sql来存放DML(Data Manipulation Language数据操作语言,包含INSERT、UPDATE、DELETE)。

我们首先在外部属性做下面配置:

spring.datasource.initialization-mode: always

关闭Hibernate自动生成DDL,让脚本来接管数据库的初始化。直接删除配置语句或:

spring.jpa.hibernate.ddl-auto: none

建立schema.sql放置在src/main/resources目录下:

CREATE TABLE IF NOT EXISTS another_person(
  id bigint(20) NOT NULL AUTO_INCREMENT, //ID使用自增
  name varchar(255) NOT NULL,
  age int(11) DEFAULT NULL,
  PRIMARY KEY (id)
);

建立data.sql放置在src/main/resources目录下:

INSERT INTO another_person (name, age) VALUES ('wyf', 35);
INSERT INTO another_person (name, age) VALUES ('foo', 34);
INSERT INTO another_person (name, age) VALUES ('bar', 33);
INSERT INTO another_person (name, age) VALUES ('www', 32);

对应的实体为:

@Data
@AllArgsConstructor
@NoArgsConstructor
@Entity
@Table(name = "another_person")
public class AnotherPerson {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY) //使用MySQL的自增
    private Long id;
    private String name;
    private Integer age;
}

我们启动应用:
在这里插入图片描述
在第二次启动前,我们关闭初始化,以防第二次启动data.sql插入重复的数据,因为id是自动生成的:

spring.datasource.initialization-mode: never

若我们在data.sql里指定了数据的id,第二次启动会有主键冲突错误。如果有应用因SQL脚本执行导致错误,我们做以下设置:

spring.datasource.continue-on-error: true

新书推荐:

我的新书《从企业级开发到云原生微服务:Spring Boot 实战》已出版,内容涵盖了丰富Spring Boot开发的相关知识
购买地址:https://item.jd.com/12760084.html
在这里插入图片描述
主要包含目录有:

第一章 初识Spring Boot(快速领略Spring Boot的美丽)
第二章 开发必备工具(对常用开发工具进行介绍:包含IntelliJ IDEA、Gradle、Lombok、Docker等)
第三章 函数式编程
第四章 Spring 5.x基础(以Spring 5.2.x为基础)
第五章 深入Spring Boot(以Spring Boot 2.2.x为基础)
第六章 Spring Web MVC
第七章 数据访问(包含Spring Data JPA、Spring Data Elasticsearch和数据缓存)
第八章 安全控制(包含Spring Security和OAuth2)
第九章 响应式编程(包含Project Reactor、Spring WebFlux、Reactive NoSQL、R2DBC、Reactive Spring Security)
第十章 事件驱动(包含JMS、RabbitMQ、Kafka、Websocket、RSocket)
第11章 系统集成和批处理(包含Spring Integration和Spring Batch)
第12章 Spring Cloud与微服务
第13章 Kubernetes与微服务(包含Kubernetes、Helm、Jenkins、Istio)
多谢大家支持。

猜你喜欢

转载自blog.csdn.net/wiselyman/article/details/106633168