多表查询在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) {this.sysRole = sysRole;}public String getUserName() {return userName;}public void setUserName(String userName) {this.userName = userName;}public String getUserPassword() {return userPassword;}public void setUserPassword(String userPassword) {this.userPassword = userPassword;}public long getUserFlag() {return userFlag;}public void setUserFlag(long userFlag) {this.userFlag = userFlag;}public SysUser(String userName, String userPassword, long userFlag, SysRole sysRole) {this.sysRole = sysRole;this.userName = userName;this.userPassword = userPassword;this.userFlag = userFlag;}public SysUser() {}
}

角色类

import javax.persistence.*;
import java.io.Serializable;
import java.util.HashSet;
import java.util.Set;@Entity
@Table(name = "sys_role")
public class SysRole {@Id@GeneratedValue(strategy = GenerationType.IDENTITY)private long roleId;private String roleName;private String roleDesc;private long roleFlag;@OneToMany(targetEntity = SysUser.class, fetch = FetchType.LAZY, cascade = CascadeType.ALL, mappedBy = "sysRole")private Set<SysUser> sysUsers = new HashSet<SysUser>();public Set<SysUser> getSysUsers() {return sysUsers;}public void setSysUsers(Set<SysUser> sysUsers) {this.sysUsers = sysUsers;}public long getRoleId() {return roleId;}public void setRoleId(long roleId) {this.roleId = roleId;}public String getRoleName() {return roleName;}public void setRoleName(String roleName) {this.roleName = roleName;}public String getRoleDesc() {return roleDesc;}public void setRoleDesc(String roleDesc) {this.roleDesc = roleDesc;}public long getRoleFlag() {return roleFlag;}public void setRoleFlag(long roleFlag) {this.roleFlag = roleFlag;}public SysRole(String roleName, String roleDesc, long roleFlag) {this.roleName = roleName;this.roleDesc = roleDesc;this.roleFlag = roleFlag;}public SysRole() {}
}

创建SysRoleRepository接口和SysUserRepository接口
SysUserRepository接口

public interface SysUserRepository extends JpaRepository<SysUser,Long> {}

SysRoleRepository接口

public interface SysRoleRepository  extends JpaRepository<SysRole,Long> {}

测试基本的CRUD
测试多对一查询

     @AutowiredSysUserRepository sysUserRepository;@Testpublic void testFindById() {SysUser sysUser = sysUserRepository.findById(18L).get();System.out.println("userName:" + sysUser.getUserName());System.out.println("roleName:" + sysUser.getSysRole().getRoleName());}

结果

测试多对一的添加

  @AutowiredSysRoleRepository sysRoleRepository;@Testpublic void testAdd() {SysRole sysRole = new SysRole("test","001",1);SysUser sysUser = new SysUser("test","1234567",1,sysRole);sysRole.getSysUsers().add(sysUser);sysRoleRepository.save(sysRole);}

结果


删除的话需要把@OneToMany注解里面的cascade属性值改成CascadeType.ALL或者是CascadeType.REMOVE即可

到这来就结束咯,快点去使用一下吧

Spring Data JPA多表查询相关推荐

  1. Spring Data JPA 多表关联查询的实现

    Spring Data JPA 多表关联查询的实现 多表查询在spring data jpa中有两种实现方式,第一种是利用hibernate的级联查询来实现,第二种是创建一个结果集的接口来接收连表查询 ...

  2. Spring Data JPA多表操作(5)

    Spring Data JPA多表操作(5) 数据库中多表之间的关系 多对多 一对多 一对一 一对多示例 数据库设计示例 实体示例 客户:指的是一家公司,我们记为A. 联系人:指的是A公司中的员工. ...

  3. spring data jpa实现分页查询功能

    spring data jpa实现分页查询功能 HTML代码部分: // 收派标准信息表格 $('#grid').datagrid( {iconCls : 'icon-forward',fit : t ...

  4. spring data jpa 多对多查询

    spring data jpa 多对多查询 以用户-角色 多读多为例: User类,用户 @Entity public class User {private String username;priv ...

  5. Spring Data Jpa多表联合分页查询

    参考:https://blog.csdn.net/qq_36144258/article/details/80298354 近期一个项目用到Spring Data Jpa,Jpa用来做单表查询非常的简 ...

  6. Spring Hibernate JPA 联表查询 复杂查询

    (转自:http://www.cnblogs.com/jiangxiaoyaoblog/p/5635152.html) 今天刷网,才发现: 1)如果想用hibernate注解,是不是一定会用到jpa的 ...

  7. spring data jpa 的 in 查询 Specification 实现

    前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家.点击跳转到教程. 只是一个简单需求:  查询所有部门id 属于  idList 的数据 Page<WorkWei ...

  8. Spring Data JPA自定义SELECT查询语句,自定义UPDATE修改语句

    查询语句: 1. 在@Query 注解里设置value ,?1.?2 分别代表第一第二个参数, nativeQuery=true  表示是否是原生SQL @Query(value = "se ...

  9. java data jpa_java中Spring data jpa通过Predicate查询时间段

    如下,想搜索time1和time2之间的数据,但是查不到cb是重写了方法中的参数CriteriaBuilder,root是参数Rootpredicates.add(cb.between(root.ge ...

最新文章

  1. robot向linux发送命令,linux发送手机短信 利用fesion robot
  2. boost::intrusive::set用法的测试程序
  3. ITK:创建一个自定义颜色图
  4. OAuth2.0学习(1-9)新浪开放平台微博认证-web应用授权(授权码方式)
  5. 电脑复制粘贴_手机扫一扫,现实物体隔空复制粘贴进电脑!北大校友的AI新研究,现在变成AR酷炫应用...
  6. java 整型数组排序,java整型数组冒泡排序
  7. 一种新的8B/10B编解码硬件设计方法
  8. 电大计算机本科离散数学考试题,国开(中央电大)本科《离散数学(本)》网上形考(任务一至三)试题及答案...
  9. Improved GAN
  10. 解读:计数器Counter
  11. React+TypeScript+webpack4多入口项目搭建
  12. OSChina 周二乱弹 —— 这样成功要到小护士姐姐的微信
  13. tbSchedule 使用
  14. Windows10使用diskpart分区
  15. vmware mac os 10.11.6 安装xcode 8
  16. win版本openssl工具下载安装
  17. 片上总线Wishbone 学习(四)接口信号定义
  18. “无聊猿” BAYC 的内忧与外患
  19. Ubuntu 20.04 -中文输入法-fcitx-connection failed [ip:91.189.91.38 80]
  20. 快速释放磁盘空间的方法

热门文章

  1. c语言数组前const的作用,c语言中const的用法
  2. Bootstrap5学习笔记
  3. Linux服务器时间同步
  4. pip卸载指定文件夹的库
  5. 另样文字 借你来欣赏
  6. 联发科mtk和骁龙730哪个好_联发科G90T和骁龙710哪个好?
  7. 面试典籍(整理于6.17-6.23)
  8. 不同的负载均衡器介绍(ALB和NLB)
  9. fit,transform,fit_transform详解
  10. Array 和 List 对比