自动建表?使用JPA根据实体类生成数据库表

254 阅读2分钟

背景:

一个实验室项目,之前数据库都在跑在实验室的服务器上面,突然服务器烧了,最新的数据库表本地没有备份(表结构已经大动过),然后这个项目后面我参与了进来,首先就需要更改数据库表(库表字段非常多),然后就想到了之前使用过的JPA,可以根据实体类生成数据库表

1.创建项目

新建springboot项目并导入以下dependency

分别是mysql和JPA

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
    <groupId>mysql</groupId>
      <artifactId>mysql-connector-java</artifactId>
    <scope>runtime</scope>
</dependency>

2.配置application

application.yml中配置JPA和Mysql连接:

url中的数据库需要提前建立好

 server:
   port: 8847
 spring:
   datasource:
     driver-class-name: com.mysql.cj.jdbc.Driver
     url: jdbc:mysql://localhost:3306/jpasqltest?useSSL=false&useUnicode=true&characterEncoding=UTF-8&severTimezone=GMT%2B8&allowPublicKeyRetrieval=true
     username: mysql用户名(注意修改为自己的mysql用户名)
     password: mysql密码  (注意修改为自己的mysql密码)
   jpa:
     hibernate:
       ddl-auto: update
     show-sql: true

其中ddl-auto的配置为:

  • create----每次运行该程序,没有表格会新建表格,表内有数据会清空
  • create----每次运行该程序,没有表格会新建表格,表内有数据会清空
  • create-drop----每次程序结束的时候会清空表
  • update----每次运行程序,没有表格会新建表格,表内有数据不会清空,只会更新
  • validate----运行程序会校验数据与数据库的字段类型是否相同,不同会报错

3.撰写实体类

image-20240229200527533

重要注解

 @Entity                   //标识为一个实体类,自动建表必须添加,且根据实体类字段生成数据库表
 @Table(name="note")  //设置生成的表明,与@Entity配合使用,不条件默认表名为实体类名
 ​
 @Id                     //标识此键为主键
 @GeneratedValue(strategy= GenerationType.IDENTITY)  //主键为自增

注意:实体类中命名为驼峰式的话,数据库表字段自动命名为下划线式 比如:createTime => create_time

其他注解:

image-20240229201159259

4.扫描注解并启动

image-20240229201400341

 @EntityScan(basePackages = {"com.sgx.jpatest"}) //扫描entity的存放位置
 @SpringBootApplication
 public class JpaTestApplication {
 ​
     public static void main(String[] args) {
         SpringApplication.run(JpaTestApplication.class, args);
     }
 ​
 }

image-20240229201505052

注意:entity需要再同意文件夹下

image-20240229201538676

最后启动Application后自动生成表:

image-20240229201718909