提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

根据实体类生成对应表

  • 引用jar包
  • 配置文件
  • 创建实体
    • 单表创建
    • 关联表创建
      • 多对多表的创建
      • 一对一关联表的创建,以及一对多关联表的创建

引用jar包

       <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><dependency><groupId>com.alibaba</groupId><artifactId>druid-spring-boot-starter</artifactId><version>1.1.10</version></dependency>

配置文件


# 数据库的基本配置
spring:datasource:username: rootpassword: 123456url: jdbc:mysql://localhost:3306/jpa?useUnicode=true&characterEncoding=UTF-8type: com.alibaba.druid.pool.DruidDataSource# JPA配置jpa:database: mysql# 在控制台打印SQLshow-sql: true# 数据库平台database-platform: mysql# 每次启动项目时,数据库初始化策略hibernate:ddl-auto: update# 指定默认的存储引擎为InnoDB,默认不指定的话使用的数据库引擎为mySAM,# mysqlConfig重写org.hibernate.dialect.MySQL57Dialect的getTableTypeString方法修改字符集为utf-8properties:hibernate:dialect: com.example.jpa.config.MysqlConfig
server:port: 8083

com.example.jpa.config.MysqlConfig
上面这个是自定义的类的路径,解决生成表时,标的字段文本类型默认不是utf-8的问题,代码如下

public class MysqlConfig extends MySQL57Dialect {@Overridepublic String getTableTypeString() {return " ENGINE=InnoDB DEFAULT CHARSET=utf8";}}

创建实体

单表创建

@Entity注解 在类上使用,表明是实体,会在数据库创建对应表。
@Id注解 一定要加,否则会报错找不到主键
@GeneratedValue这个是指定主键生成策略strategy = GenerationType.IDENTITY为主键自增
@Colum 可加可不加,主要是用来类的属性做一些定制,可以通过指定name来改变生成表的属性名,默认采用驼峰命名规则。nullable设置为false不为空。columnDefinition可以用来改变表字段的相应属性,值与sql语句声明相同,例如:varchar(100) default ‘’ comment ‘我是字段注释…’
表示字段类型为varchar 长度为100 默认空串注释为我是字段注释
如果想要加表注释就得使用@org.hibernate.annotations.Table注解appliesTo表示应用的表,必填
comment是注释。

基于此单表已经可以使实现创建了,下面的例子

@Data
@Entity(name="sys_user")
@ToString
//@org.hibernate.annotations.Table(appliesTo = "user",comment="用户")
public class User{@Id@Column(name="user_id")@GeneratedValue(strategy = GenerationType.IDENTITY)private Long id;@Column(nullable = false)private String username;@Column(nullable = false)private String nickName;}

关联表创建

多对多表的创建

@ManyToMany 里面的targetEntity指定关联的对象,不包括中间表。cascade 指定当前表拥有的权限,值有

  CascadeType.cascade 赋予增加role的权限CascadeType.ALL, 所有权限CascadeType.PERSIST, 新增操作权限 没有权限,当保存user时无法保存role并且会报错CascadeType.MERGE, 更新CascadeType.REMOVE, 删除CascadeType.REFRESH, 假设场景 有一个订单,订单里面关联了许多商品,这个订单可以被很多人操作,那么这个时候A对此订单和关联的商品进行了修改,与此同时,B也进行了相同的操作,但是B先一步比A保存了数据,那么当A保存数据的时候,就需要先刷新订单信息及关联的商品信息后,再将订单及商品保存CascadeType. DETACH;  想删除某个实体但是他有外建无法删除,会撤销外键

@JoinTable 通过name来指定中间表的名称,不指定则默认创建,通过joincolumn来指定当前表的关联,joincolumn={@JoinColumn(name="",referenceColumn="")},其中name是当前表的关联字段,referenceColumn是中间表的字段。示例:

 @Id@Column(name="user_id")@GeneratedValue(strategy = GenerationType.IDENTITY)private Long id;@Column(columnDefinition = "text",nullable = false)private String username;@Column(columnDefinition = "text",nullable = false)private String nickName;@ManyToMany(targetEntity = Role.class,cascade = CascadeType.PERSIST)@JoinTable(name = "user_role_link",joinColumns ={@JoinColumn(name="user_id",referencedColumnName = "user_id")},inverseJoinColumns = {@JoinColumn(name="role_id",referencedColumnName = "role_id")})private List<Role> roles;

@Data
@Entity(name="sys_role")
public class Role {@Id@Column(name="role_id")@GeneratedValue(strategy = GenerationType.IDENTITY)private Long id;@Column(columnDefinition = "text",nullable = false)private String roleName;/* @ManyToMany(targetEntity = User.class)@JoinTable(name="user_role_link",//本表指向joinColumns ={@JoinColumn(name="role_id",referencedColumnName = "role_id")},//关联表指向inverseJoinColumns = {@JoinColumn(name="user_id",referencedColumnName = "user_id")})@JsonIgnoreprivate List<User> users;*/
}

可以看到role类里的我是注释掉的
如果在查role的时候一定要查找user,那么则需要加上注解,规则同上,但是最后一定要加一个@JsonIgnore注解,否则汇报错,大致原因就是循环解析

多对多还可已通过创建三个单表来实现。这样可以避免外键的关联

一对一关联表的创建,以及一对多关联表的创建

@OneToOne 指定tagertEntity,根据业务配置cascade的值
@joinColumn name值为当前表关联其他标的字段名称,refenrenceColumn关联的他表字段
这样就可已配置完成了。注意:被关联表的外键是不用显示在实体类的,生成表时会自动创建
如果关联的两表的都需要用有对方的实体。那么都需要使用@joinColumn,这样就需要使用@jsonignore注解否则会循环
示例:

@Entity
@Data
public class Person {@Id@Column(name="person_id")@GeneratedValue(strategy= GenerationType.IDENTITY)private Long id;@Column(nullable = false)private String name;@OneToOne(targetEntity = Book.class)@JoinColumn(name="person_id",referencedColumnName = "person_id")private Book book;
}
@Data
@Entity
@org.hibernate.annotations.Table(appliesTo = "book",comment="我会有表注释的哟...")
public class Book {@Id@GeneratedValue(strategy= GenerationType.IDENTITY)@Column(name="book_id")private Long id;@Column(nullable = false,columnDefinition = "varchar(100) default '' comment '我是字段注释...'")private String name;/* @OneToOne(targetEntity = Person.class)@JoinColumn(name="person_id",referencedColumnName = "person_id")@JsonIgnoreprivate Person person;*/
}

一对多同一对一用法类似,把@OneToOne的注解换成@OneToMany或者@ManyToOne
就好,注意一对多中的一使用@OneToMany,多使用@ManyToOne

SpringBoot spring-data-jpa表的生成相关推荐

  1. 基于SpringBoot+ Spring Data Jpa的后台管理系统【源码开源】

    昨天朋友找我喝酒,说30岁了,比较焦虑,钱没赚到,整天被媳妇数落. 其实现在我们看到的不一定就事真实的情况,就算从高斯分布看,平平淡淡的人生才是大部分人的轨迹.当然抖音.知乎上的不能比,人均收入百万, ...

  2. SpringBoot + Spring data JPA使用方言(自定义函数、一些自带函数)

    本人之前一直用mybitis,现在项目上使用jpa,给我带来了极大的方便,但也遇到一些问题.下列需求是这样的,我要根据id in 筛选出符合条件的数据,并将其中的某个字段,拼接起来返回.用原生sql比 ...

  3. spring-boot (三) spring data jpa

    学习文章来自:http://www.ityouknow.com/spring-boot.html spring data jpa介绍 首先了解JPA是什么? JPA(Java Persistence ...

  4. SpringBoot集成Spring Data JPA多数据源(二)

    目录 1.引入依赖 2.application.yml配置文件 3.AtomikosJtaPlatform 4.事务管理器JPAAtomikosTransactionConfig 5.主数据源配置 6 ...

  5. Spring Boot(五):spring data jpa的使用

    Spring Boot(五):spring data jpa的使用 一.spring data jpa介绍 1,JPA是什么 JPA(Java Persistence API)是Sun官方提出的Jav ...

  6. Spring boot (5):Spring data jpa 的使用

    总结: jpa是什么,spring data jpa是什么? jpa是一套规范,不是一套产品.jpa是一套规范,不是一套产品. spring data jpa是spring基于ORM框架.JPA规范的 ...

  7. 具有中央异常处理和VO验证的Spring Data JPA –框架

    1.简介 一段时间以来,Spring框架已成为事实上的标准,可以创建任何基于REST API的应用程序. Spring提供了各种现成的组件,以避免编写重复而繁琐的样板代码. 另外,关于Spring的美 ...

  8. SpringBoot 实战 (八) | 使用 Spring Data JPA 访问 Mysql 数据库

    微信公众号:一个优秀的废人 如有问题或建议,请后台留言,我会尽力解决你的问题. 前言 如题,今天介绍 Spring Data JPA 的使用. 什么是 Spring Data JPA 在介绍 Spri ...

  9. 第九章SpringBoot整合Spring Data JPA

    目录 1 概述 2 Spring Data JPA整合 2.1 pom文件 2.2 配置文件 2.3 实体类 2.4 Dao接口 2.5 启动类 2.6 编写测试类 3 Spring Data JPA ...

  10. 【SpringBoot框架篇】11.Spring Data Jpa实战

    文章目录 1.简介 1.1.JPA 1.2.Spring Data Jpa 1.3.Hibernate 1.4.Jpa.Spring Data Jpa.Hibernate三者之间的关系 2.引入依赖 ...

最新文章

  1. 本地计算机用户改名,win10本地账户管理员怎么改名,详细操作步骤请看本篇
  2. linux桌面旋转了180度,[多图]回顾每一款默认Ubuntu壁纸
  3. Java集合系列---ConcurrentHashMap源码解析
  4. 12-Juice饮料
  5. Eve-NG-Toolkit
  6. 苹果官网下架 iPhone 8 全系;阿里推出“阿里云会议”;深度操作系统 20 BETA 发布 | 极客头条...
  7. dubbo调用服务出现如下异常
  8. python json格式和csv文件转换
  9. 统计学习(一):数据的组织和表示
  10. C# ADO.NET中设置Like模糊查询
  11. 噇字符集linux,gbk编码
  12. 2012-11-21nbsp;09:30nbsp;NSStr…
  13. 英文对“ Big O”符号的解释是什么?
  14. DIY个性家装心得家用电动工具选择
  15. 安卓view.getMeasuredHeight()得到的高度单位以及dp和px的转换
  16. MAC的delete键与Windows的对应关系
  17. 可汗学院公开课:线性代数笔记-10-三元线性方程
  18. Nginx subs_filter模块替换文本
  19. 创业公司第三方服务精选(移动互联网版)
  20. RS485 通信电路 PCB

热门文章

  1. 输入子系统代码内核代码分析
  2. Mysql组复制(MGR)——技术细节
  3. 家装家居自救指南:线上线下大融合
  4. camx框架-Camera初始化
  5. 试题 算法训练 24点
  6. PS保留渐变进行换色
  7. Untiy添加水印并保存(包含文字转图片并打水印)
  8. iOS开发关于“发送原图”功能问题的记录
  9. MPDA:基于Domain Adaption的V2X协同感知(3D目标检测)
  10. 应付款与分工之利读后感