经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » Java相关 » Spring » 查看文章
SpringBoot+jpa配置如何根据实体类自动创建表
来源:jb51  时间:2021/11/22 16:44:35  对本文有异议

jpa配置根据实体类自动创建表

1.配置文件application.properties

  1. spring.datasource.url=jdbc:mysql://localhost:3306/bootTable?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8&useSSL=true
  2. spring.datasource.username=root
  3. spring.datasource.password=123456
  4. spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
  5. spring.jpa.database=mysql
  6. spring.jpa.show-sql=true
  7. spring.jpa.hibernate.ddl-auto=update
  8. spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL5Dialect

2.pom.xml引入包

  1. <dependency>
  2. <groupId>org.springframework.boot</groupId>
  3. <artifactId>spring-boot-starter-data-jpa</artifactId>
  4. </dependency>
  5. <dependency>
  6. <groupId>mysql</groupId>
  7. <artifactId>mysql-connector-java</artifactId>
  8. </dependency>

3.编写实体类

  1. import javax.persistence.*;
  2. import java.io.Serializable;
  3. import java.util.Objects;
  4. @Entity
  5. //声明实体类
  6. public class User implements Serializable {
  7. @Id
  8. //声明了实体唯一标识对应的属性
  9. @GeneratedValue
  10. //自增
  11. private Integer id;
  12. @Column(nullable = false, unique = true, length = 32)
  13. //长度32,唯一索引,nullable表示true可以为空,false不可以
  14. //用来声明实体属性的表字段的定义
  15. private String userName;
  16. private String passWord;
  17. private String email;
  18. private String nickName;
  19. private String regTime;
  20. @Transient
  21. //不映射成列的字段
  22. private String desc;
  23. //省略get和set方法
  24. }

4.运行项目

启动即可生成

5.针对项目启动以后数据库并未生成数据库表问题

包导的不对: import javax.persistence.*;

配置文件不对: spring.jpa.hibernate.ddl-auto=update

注解写的不对:不要忘记@Entity

还可能有一种原因:

Sprint的入口文件在子目录里了,应该比其他诸如service、dao、controller、entity高一级。

例如:service文件所在为com.demo.metaService,那么入口文件xxxApplication.java应该在com.demo下

jpa根据Entry自动生成表

1.加入依赖

  1. <dependency>
  2. <groupId>org.springframework.boot</groupId>
  3. <artifactId>spring-boot-starter-data-jpa</artifactId>
  4. </dependency>

若有依赖 spring-data-jpa 则删掉,否则会出现找不到 bootstrap 之类的错误

  1. <!-- <dependency>-->
  2. <!-- <groupId>org.springframework.data</groupId>-->
  3. <!-- <artifactId>spring-data-jpa</artifactId>-->
  4. <!-- <version>2.1.4.RELEASE</version>-->
  5. <!-- </dependency>-->

2.配置 application.yml

增加Jpa 自动生成表的配置

  1. spring:
  2. jpa: ##配置自动建表:updata:没有表新建,有表更新操作,控制台显示建表语句
  3. hibernate:
  4. ddl-auto: update
  5. show-sql: true

3. 创建Entity

个人建议创建一个基础Entity,用于表中常用字段创建配合 mybatisplus,jackson,SnowFlake,lombok 等库,自行导入相关注解请自行了解

BaseEntry.java

  1. @Data//省略setget方法
  2. @MappedSuperclass //标注父类
  3. @EntityListeners(AuditingEntityListener.class) //jpa数据监听
  4. @JsonIgnoreProperties(value={"hibernateLazyInitializer","handler","fieldHandler"}) //忽略解析的字段
  5. public abstract class BaseEntry implements Serializable{
  6. private static final long serialVersionUID = 1L;
  7. @Id
  8. @TableId
  9. @ApiModelProperty(value = "唯一标识")
  10. private String id = String.valueOf(SnowFlakeUtil.getFlowIdInstance().nextId());
  11. @ApiModelProperty(value = "创建者")
  12. @CreatedBy
  13. private String createBy;
  14. @CreatedDate
  15. @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
  16. @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
  17. @ApiModelProperty(value = "创建时间")
  18. private Date createTime;
  19. @ApiModelProperty(value = "更新者")
  20. @LastModifiedBy
  21. private String updateBy;
  22. @LastModifiedDate
  23. @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
  24. @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
  25. @ApiModelProperty(value = "更新时间")
  26. private Date updateTime;
  27. @ApiModelProperty(value = "删除标志 默认0")
  28. @TableLogic
  29. private Integer delFlag = CommonConstant.STATUS_NORMAL;
  30. }

业务Entry ,仅做参考

  1. /**
  2. * tb_bussiness_up_record实体类
  3. *
  4. * @author
  5. *
  6. */
  7. @Data
  8. @Entity
  9. @Table(name = "tb_bussiness_up_record")
  10. @TableName("tb_bussiness_up_record")
  11. public class TbBussinessUpRecord extends BaseEntry {
  12. private static final long serialVersionUID = 1L;
  13. @ApiModelProperty(value = "经销商")
  14. private String bussinessId;
  15. @ApiModelProperty(value = "审核时间")
  16. @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
  17. @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
  18. private String auditTime;
  19. }

以上为个人经验,希望能给大家一个参考,也希望大家多多支持w3xue。

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号