jpa可以配置生成正向工程或者逆向工程

    • 正向工程:首先存在实体类,然后通过实体类来生成对应的数据表
    • 逆向工程:首先存在数据表,然后通过数据表来生成对应的实体类

    可以配置jpa设置中的 spring.jpa.generate-ddl 或者 spring.jpa.hibernate.ddl-auto 来设置是否根据实体类来生成对应的数据表

    spring.jpa.hibernate.ddl-auto的配置属性,一般使用update即可

    create: 每次运行程序都会删除原来的数据表,然后再重新创建一个数据表
    create-drop: 每次都会创建一个数据表,数据表使用完毕之后,再数据表重新删除
    none: 将功能关闭
    update: 如果表的结构和实体类没有进行映射(实体类发生了一定的变化),那么数据表就会对应的进行更新
    validate: 实体类和数据表进行校验,如果属性或者个数不一致,就会抛异常

    初始化时对于另一个属性spring.jpa.generate-dll在理解上的困惑
    可以参考这篇文章—-用属性控制Hibernate生成DDL
    按照它的描述,spring.jpa.generate-dll是jpa层面对数据表生成策略的控制,而spring.jpa.hibernate.ddl-auto是jpa实现hibernate层面上对数据表生成策略的控制。
    实践也验证了文章里所说的,spring.jpa.generate-dll比spring.jpa.hibernate.ddl-auto有更强的控制力度,即使spring.jpa.hibernate.ddl-auto为none,只要spring.jpa.generate-dll为true,也会根据@Entity注解的实体类生成对应数据表。
    按照文章的建议,为了避免混淆和不好理解,这两者最好不要混用,只对JPA实现层面的控制属性spring.jpa.hibernate.ddl-auto进行设置即可。

    参考:SpringBoot启动时初始化数据库及spring.jpa.generate-dll与spring.jpa.hibernate.ddl-auto之间的困惑
    SpringBoot启动时初始化数据库及spring.jpa.generate-dll与spring.jpa.hibernate.ddl-auto之间的困惑 - StarkBrothers - 博客园

    application.properties

    1. server.port = 8080
    2. spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
    3. spring.datasource.url=jdbc:mysql://1.117.163.52:3306/flutter?serverTimezone=UTC
    4. spring.datasource.username=flutter
    5. spring.datasource.password=yu020506
    6. #jpa 相关的配置
    7. # 开发阶段可以设置为 true, 开启了逆向工程
    8. # 数据库和Java之间存在两种关系: 正向工程和逆向工程
    9. # 逆向工程: 存在数据库的表,然后数据库表可以生成实体类
    10. # 正向工程: 首先存在实体类,然后根据实体类生成对应的数据库的表
    11. #spring.jpa.generate-ddl=true
    12. # create: 每次运行程序都会删除原来的数据表,然后再重新创建一个数据表
    13. # create-drop: 每次都会创建一个数据表,数据表使用完毕之后,再数据表重新删除
    14. # none: 将功能关闭
    15. # update: 如果表的结构和实体类没有进行映射(实体类发生了一定的变化),那么数据表就会对应的进行更新
    16. # validate: 实体类和数据表进行校验,如果属性或者个数不一致,就会抛异常
    17. spring.jpa.hibernate.ddl-auto=update
    18. spring.jpa.show-sql=true
    19. spring.jpa.database-platform=org.hibernate.dialect.MySQL5InnoDBDialect