1...表与表之间的关系

一对一: A   B  两张表  A表中的每条的记录对应的B的一条记录

   :一对一关系实现方式:

         1:使用外键关联 

    :  场景:使用客户表和客户拓展表 

    :在属性上 添加一个@OneToOne代表一个对一个的关系    在属性上添加@JoinColumn​ name 存储外键的字段     referencedColumnNm 对方表的字段名称 (可以省略)

         2:使用主键关联,两个表  A  B 的主键相同。

   : 使用@PrimaryKeyJoinColumn 注解不需要配置属性   ​双方都需要添加

一对多: A   B  两张表  A表中的每条的记录对应B表中多条的记录    B表中多条的记录对应A表中一条记录

   :场景:客户和联系人之间 一对多       ​ 一个客户对应多个联系人

   :单方:1  添加一个属性 记录多的一方的信息  应该是一个集合 hashset    2  在属性上添加一个注解  @OneToMany      3一定是多的一方记录外键   参照一的一方的主键

   :多方:1  在属性上添加 注解   @ManyToOne   2   在属性上添加 @joinColumn 注解

多对多: A   B  两张表    A表中的每条的记录对应B表中多条的记录      B表中的每条记录对应A表中的多条记录

   :应用场景   用户和角色的关系  用户  角色  关系为例   CRM(客户关系管理)

  多对多使用注解@ManyToMany配置

    ​ a 在实体中添加一个集合属性

    ​ b 在属性上添加ManyToMany注解

    ​ c:@JoinTable 注解配置关联关系

​     name 中间表的名称

​     当前表和中间表的映射关系

​     对方表和中间映射表的关系

​     多对多关系中 只能一方维护关联关系 另一方放弃维护

  配置级联操作

    ​ @ManyToMnay注解中 配置cascade属性

    关联查询

        1 使用导航的方式查询 重难点

​     使用“对象.属性” 进行查询

    对于多的查询 默认就是延迟加载 添加注解@Transactional

​     在OneToMany 注解中需要添加属性 fetch

​     值:FetchType.LAZY   延迟加载

​     FetchType.EAGER   及时加载

​     通过联系人 查询客户

​     对一的查询默认是及时加载

​     也可以配置成延时加载

具体实现:简单案例:

1....pom.xml 与 applicationContext.xml 请看  表与表关联 一对一

2....实体类

User 类

 1 package com.wsc.core.entity;
 2 
 3 import javax.persistence.*;
 4 import java.io.Serializable;
 5 import java.util.HashSet;
 6 import java.util.Set;
 7 
 8 /**
 9  * @version 1.0
10  * @ClassName User
11  * @Description TODO
12  * @Author WSC
13  * @Date 2019/8/21 9:55
14  **/
15 @Entity
16 @Table(name="user")
17 public class User implements Serializable {  //实现序列化
18     @Id
19     @GeneratedValue(strategy = GenerationType.IDENTITY)
20     @Column(name="user_id")
21     private long userId;
22     @Column(name="username")
23     private String username;
24     @Column(name="password")
25     private String password;
26     //多对多关联关系    配置cascade属性
27     // FetchType.LAZY   延迟加载
28     // FetchType.EAGER   及时加载
29     @ManyToMany(cascade = CascadeType.ALL,fetch = FetchType.EAGER)
30 //    注解配置关联关系
31 //    name 中间表的名称
32 //   joinColumns 当前表和中间表的映射关系
33 //   inverseJoinColumns 对方表和中间映射表的关系
34 
35     @JoinTable(name="user_role",joinColumns = @JoinColumn(name="userid",referencedColumnName = "user_id"),
36             inverseJoinColumns = @JoinColumn(name="roleid",referencedColumnName = "role_id"))
37     Set<Role> role=new HashSet<Role>();
38 
39     @Override
40     public String toString() {
41         return "User{" +
42                 "userId=" + userId +
43                 ", username='" + username + '\'' +
44                 ", password='" + password + '\'' +
45                 ", role=" + role +
46                 '}';
47     }
48 
49     public long getUserId() {
50         return userId;
51     }
52 
53     public void setUserId(long userId) {
54         this.userId = userId;
55     }
56 
57     public String getUsername() {
58         return username;
59     }
60 
61     public void setUsername(String username) {
62         this.username = username;
63     }
64 
65     public String getPassword() {
66         return password;
67     }
68 
69     public void setPassword(String password) {
70         this.password = password;
71     }
72 
73     public Set<Role> getRole() {
74         return role;
75     }
76 
77     public void setRole(Set<Role> role) {
78         this.role = role;
79     }
80 }
View Code

相关文章: