spring boot 整合 jpa (一) – 之基础配置
https://blog.csdn.net/qq_41463655/article/details/82939481
spring boot 整合 jpa (二) – 之数据操作
https://blog.csdn.net/qq_41463655/article/details/82939560
@Entity
1、数据库不存在表会自动创建表
2、数据库不存在某些字段数据库会自动创建该字段
指定了外键关系会自动在数据库中生成外键
User 用户类
@Table(name = "ws_user") //生成数据库的表名
@Entity // 该注解声明一个实体类,与数据库中的表对应
public class User {
@Id // 表明主键id
@GeneratedValue // 主键的生成策略(看最下方注释具体说明)
private Long userId;
private String username;
private String password;
//======================= 用户 - [ 一对一 ] - 用户详情 ================
// @JoinColumn(name = "user_id") //外键关联
@PrimaryKeyJoinColumn //主键关联
@OneToOne(cascade=CascadeType.ALL) //ALL 级联/添加/更新/删除(看最下方注释具体说明)
// 用户详情类
private UserDetail de![在这里插入图片描述](https://img-blog.csdn.net/2018100419254813?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQxNDYzNjU1/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70)tail;
//======================= 用户 - [ 一对多 ] - 收获地址 ===============
//外键关联,指定一的一端的id 做外键
@JoinColumn(name = "user_id")
@OneToMany(cascade=CascadeType.ALL)
// 地址类
private List<Address> addresses;
//======================= 用户 - [ 多对一 ] - 部门 ================
//外键关联,指定一的一端的id 做外键
@JoinColumn(name = "dep_id")
@ManyToOne(cascade=CascadeType.ALL)
// 部门类
private Dep dep;
//======================= 用户 - [ 多对多 ] - 角色 ===================
//name指中间表的表名,joinColumns指当前实体在中间表的字段,inverserJoinCloumns指关联的另外一个实体在中间表的字段名
@JoinTable(name="ws_user_role",joinColumns=@JoinColumn(name="user_id"),inverseJoinColumns=@JoinColumn(name="role_id"))
@ManyToMany(cascade=CascadeType.ALL)
//角色类
private List<Role> roles;
set,get 方法自行添加........
//详细注解说明
// ================================= 表关系注解说明 ================================
// @JsonIgnore //将不需要返回的属性上添加忽略,多为复杂表关系属性排除使用
//@Transient 注解,表明为成员变量,不和数据库字段做映射
/*
* @OneToOne 一对一
* @OneToMany 一对多
* @ManyToOne 多对一
* @ManyToMany 多对多
*
* 上诉关系指定后添加的属性
* cascade:表示默认的级联操作策略,可以指定为ALL(全部),默认为无级联操作
* PERSIST(级联保存),
* MERGE (级联更新),
* REFRESH(级联刷新)
* REMOVE (级联删除)
* fetch:表示抓取策略,默认为FetchType.EAGER ,
* EAGER(急记载,立即记载)
* LAZY(懒加载)
* optional:是否允许该字段为null,该属性应该根据数据库表的外键约束来确定,默认为true
**/
// ================================= 属性注解 @Column 说明 ================================
/*
*
* @Column: 指定生成的表字段名和长度,不指定默认255长度且表字段名同属性名一致
*
* 指定字段 tradeNo 长度为50,且值不能为null
* @Column(name = "tradeNo", length = 50, nullable = false)
*
* 指定字段 tradeNo 长度为50,且值可以为null
* @Column(name = "tradeNo", length = 50, nullable = true)
*
* 指定字段totalAmount(长度)为10,小数点位数为2位,且值不能为null
* @Column(name = "totalAmount", precision = 10, scale = 2, nullable = false)
*
**/
// =============================== 主键策略 @GeneratedValue 说明 ============================
/** @GeneratedValue 主键id --> 生成策略注解说明
* @GeneratedValue(strategy=GenerationType.AUTO) //示范
* –IDENTITY:采用数据库ID自增长的方式来自增主键字段,Oracle 不支持这种方式;
* –AUTO: JPA自动选择合适的策略,是默认选项;
* –SEQUENCE:通过序列产生主键,通过@SequenceGenerator 注解指定序列名,MySql不支持这种方式
* –TABLE: 通过表产生主键,框架借由表模拟序列产生主键,使用该策略可以使应用更易于数据库移植。
**/
指定关系后,查询用户就可以把用户关联其他表的所有数据查询出来了
调用 controller 的查询方法获得
[{“userId”:2,“username”:“小微”,“password”:“123”,“detail”:{“detailId”:2,“nickname”:“17603093954”},“addresses”:[{“id”:3,“province”:“泥南乡”,“city”:“宜宾”}],“dep”:{“depId”:2,“name”:“管理”},“roles”:[{“roleId”:1,“name”:“开发”}]},{“userId”:1,“username”:“王松”,“password”:“123”,“detail”:{“detailId”:1,“nickname”:“17628689969”},“addresses”:[{“id”:1,“province”:“红星桥”,“city”:“成都”},{“id”:2,“province”:“泥南乡”,“city”:“宜宾”}],“dep”:{“depId”:1,“name”:“技术”},“roles”:[{“roleId”:1,“name”:“开发”},{“roleId”:2,“name”:“测试”}]}]
格式化查看
用户详情类
import javax.persistence.*;
/**
* Created by Administrator on 2018/10/3/003.
* 用户详情类
*/
@Table(name = "ws_detail")
@Entity
public class UserDetail {
@Id
@GeneratedValue(strategy = GenerationType.AUTO) // 主键的生成策略
private Long detailId;
private String nickname;
//省略set,get.......
}
收获地址类
/**
* Created by Administrator on 2018/10/3/003.
* 收获地址类
*/
@Table(name="ws_address")
@Entity
public class Address {
@Id
@GeneratedValue(strategy= GenerationType.AUTO)
private Long id;
private String province;
private String city;
//省略set,get.......
}
部门类
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Table;
/**
* Created by Administrator on 2018/10/3/003.
* 部门类
*/
@Table(name = "ws_dep")
@Entity
public class Dep {
@Id
@GeneratedValue
private Long depId;
private String name;
//省略set,get.......
}
角色类
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Table;
/**
* Created by Administrator on 2018/10/3/003.
* 角色类
*/
@Table(name = "ws_role")
@Entity
public class Role {
@Id
@GeneratedValue
private Long roleId;
private String name;
//省略set,get.......
}