Springboot结合Jpa实现自动生成表
一、创建Springboot+maven工程,引入JPA依赖和MySQL驱动
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.46</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
(这里要注意mysql驱动包的版本,有可能引发java.sql.SQLNonTransientConnectionException: CLIENT_PLUGIN_AUTH is required )
二、在resources文件夹下创建application.yml文件
spring:
datasource:
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql://localhost:3306/******
username: ******
password: ******
jpa:
hibernate:
ddl-auto: update
show-sql: true
ddl-auto:create----每次运行该程序,没有表格会新建表格,表内有数据会清空
ddl-auto:create-drop----每次程序结束的时候会清空表
ddl-auto:update----每次运行程序,没有表格会新建表格,表内有数据不会清空,只会更新
ddl-auto:validate----运行程序会校验数据与数据库的字段类型是否相同,不同会报错
三、创建实体类(切记实体类需建立在启动类包下,如启动类在com.example,实体类就可以为com.example.pojo),这里贴上实体类代码
import org.hibernate.annotations.GenericGenerator;
import javax.persistence.*;
import java.io.Serializable;
@Entity
@Table(name="t_user")
public class User implements Serializable {
private static final long serialVersionUID = -561208975481652974L;
@Id
@GenericGenerator(name = "idGenerator",strategy = "uuid")
@GeneratedValue(generator = "idGenerator")
private String id;
@Column(length = 32)
private String username;
@Column(length = 32)
private String password;
public String getId() {
return id;
}
public void setId(String 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;
}
}
实体类解释:
- 实体类需序列化,也就是实现Serializable 接口
- 注解都是javax.persistence的
- @Entity:声明实体类
- @Table:形成实体和表的映射,name属性指定表名,不指定默认为类名
- @Id:声明主键
- @GenericGenerator:是hibernate所提供的自定义主键生成策略生成器,所以,它要配合@GeneratedValue一起使用,并且@GeneratedValue注解中的”generator”属性要与@GenericGenerator注解中name属性一致,strategy属性表示hibernate的主键生成策略,@GenericGenerator共支持13种策略,这里使用最为广泛的uuid
- GeneratedValue:俩个属性参数:GenerationType类型的strategy和String类型的generator,generator对应@GenericGenerator的"name"属性,"strategy"有四个默认值,这里插入源码
package javax.persistence;
public enum GenerationType {
TABLE,//使用一个特定的数据库表格来保存主键。
SEQUENCE,//根据底层数据库的序列来生成主键,条件是数据库支持序列。
IDENTITY,//主键由数据库自动生成(主要是自动增长型)
AUTO;//主键由程序控制
private GenerationType() {
}
}
至此,就配置完了,启动即可看见自动生成的表了