多表查询在Spring Data JPA中有两种实现方式
第一种创建一个结果集接口来接收多表连查的结果
第二种利用JPA的关联映射来实现
先来熟悉一下几个注解
注解 | 意思 | 属性 |
---|---|---|
@ManyToOne | 定义了连接表之间的多对一的关系。 | targetEntity属性表示关联的实体类型,可省略,fetch属性表示加载策略,FetchType的取值范围LAZY(延迟加载)默认上EAGER,cascade属性表示级联操作,CascadeType取值范围PERSIST(级联持久化),REMOVE(级联删除),ALL(级联所以操作)…等,一般不推荐使用ALL,风险较大,cascade属性一般不在多对一的地方使用,通常在一对多地方使用 |
@JoinColumn | 指定一个实体组织或实体的集合。这是用在多对一和一对多关联。 | name属性表示外键的字段名称 |
@OneToMany | 定义了连接表之间存在一个一对多的关系。 | 具有@ManyToOne注解的属性,还有mappedby属性用来设置对象之间的关系维护方 |
这里只是列出了JPA进行多表查询的注解,如果对普通的JAP注解不了解的可以去看一下这篇相关的博客
什么是JPA、JPA的基础实战
话不多说,直接上代码,让老夫来瞎操作一波
先上两个实体类,用户类,角色类,这里不建议使用@Data的注解,不然会出现堆栈溢出的异常
大家在看实体类的时候一定要认真看哦,看清楚使用了哪些注解以及属性
用户类
import javax.persistence.*;
import java.io.Serializable;
@Entity
@Table(name = "sys_user")
public class SysUser implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private long userId;
private String userName;
private String userPassword;
private long userFlag;
@ManyToOne(targetEntity = SysRole.class)
@JoinColumn(name = "user_role_id")
private SysRole sysRole;
public long getUserId() {
return userId;
}
public void setUserId(long userId) {
this.userId = userId;
}
public SysRole getSysRole() {
return sysRole;
}
public void setSysRole(SysRole sysRole)