• Hibernate
  • SpringBoot

添加依赖

  1. jpa用于连接增删改数据库的
1
2
3
4
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
  1. mysql连接驱动
1
2
3
4
5
<dependency>
<groupId>com.mysql</groupId>
<artifactId>mysql-connector-j</artifactId>
<scope>runtime</scope>
</dependency>
1
2
3
4
5
<!-- 我使用下面这个驱动会报错 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>

配置数据库

修改application.properties或同目录新建application.yml

1
2
3
4
5
6
spring:
datasource:
url: jdbc:mysql://192.168.31.5:3306/managerSys
username: root
password: root
driver-class-name: com.mysql.jc.jdbc.Driver

建议添加的配置

hibernate是一种对象关系映射框架,hibernate可以实现自动建表。

1
2
3
4
jpa: 
show-sql: true
hibernate:
ddl-auto: create

hibernate的5个模式

见下文。

hibernate的5个模式

DDL(Data Definition Language),即数据定义语言,例如建数据库、建表等,都属于数据定义语言。

create模式

每次运行项目,没有表会新建表,如果表内有数据会被清空

create-drop模式

每次运行项目,没有表会新建表,并且每次程序结束后,删除表。

update模式

没有表格会新建,不会删除数据,只会对表进行更新操作。

validate模式

校验模式,校验字段数据类型是否相同,不同则报错。

none模式

关闭ddl,什么都不做,每次启动项目,不会对数据库进行任何验证和操作。

演示Hibernate自动建表

新建Entity

User.java

  • 定义成员变量
  • @id,设置变量对应为主键
  • @GeneratedValue,设置变量为自增
  • 一键生成getter、setter方法,以及一个无参的构造方法
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
package com.mysqlapi;

import jakarta.persistence.Entity;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.Id;

@Entity
public class User {
@Id
@GeneratedValue
private Integer id;
private String userName;
private String password;

public User() { //构造函数

}
public Integer getId() {
return id;
}

public void setId(Integer id) {
this.id = id;
}

public String getUserName() {
return userName;
}

public void setUserName(String userName) {
this.userName = userName;
}

public String getPassword() {
return password;
}

public void setPassword(String password) {
this.password = password;
}
}

新建Controller

StudentController.java

  • 暂时啥也不写
1
2
3
4
5
6
7
8
package com.mysqlapi;

import org.springframework.web.bind.annotation.RestController;

@RestController
public class StudentController {

}

运行项目

run as spring boot app

日志中可以观察到,show-sql: true正常工作。

1
2
3
4
5
6
7
...
Hibernate: drop table if exists user
Hibernate: drop table if exists user_seq
Hibernate: create table user (id integer not null, password varchar(255), role varchar(255), user_name varchar(255), primary key (id)) engine=InnoDB
Hibernate: create table user_seq (next_val bigint) engine=InnoDB
Hibernate: insert into user_seq values ( 1 )
...

查看数据库,可以发现已经成功创建!

image-20230310184516354

ddl-auto使用注意

一般情况下,ddl-auto使用update模式最安全。