Springboot整合JPA 多表关联操作 @Query
如果还没使用过JPA的可以去先看我这篇:https://blog.csdn.net/qq_35387940/article/details/102541311
这篇文章里我所采取的是使用Map来 替代 关联的接口,网上很多都是为了关联A B两个表,选择新建A&B这个interface去实现关联获取查询出来的数据。还有就是涉及主外键那种,需要在实体类上面使用@ManyToOne/@ManyToMany/@OneToMany/@OneToOne 这些。
我这里只想满足多表关联的需求且又不用写多那么多代码所以我选择使用Map,这样只需要我们自己先把业务逻辑理清楚了,数据拿到手我们自己操作。
OK,一起来创建两个类,一个User.java ,一个Company.java :
import lombok.Data;
import lombok.ToString;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;/*** @Author : JCccc* @CreateTime : 2019/10/12* @Description :**/@Data
@Entity // 该注解声明一个实体类,与数据库中的表对应
@ToString
public class User {@Id // 表明id@GeneratedValue(strategy = GenerationType.IDENTITY) // 自动生成private Long id ;private Long cid ;private String name ;
}
import lombok.Data;
import lombok.ToString;
import javax.persistence.*;/*** @Author : JCccc* @CreateTime : 2019/10/14* @Description :**/@Data
@Entity // 该注解声明一个实体类,与数据库中的表对应
@ToString
public class Company {@Id // 表明id@GeneratedValue(strategy = GenerationType.IDENTITY) // 自动生成private Long cid ;private String companyName;
}
这里面是用到了lombok jar包的:
<!--lombok--><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.16.10</version><scope>provided</scope></dependency>
User和Company两个实体类,通过cid作为关联键,运行项目,则会生成对应以下两种表:
company表:
user表:
ok,接下来 我们来实现一些关联这两张表的查询操作,
在UserMapper.java里面 扩展2个方法:
/*** @Author : JCccc* @CreateTime : 2019/10/12* @Description :**/@Component
public interface UserMapper extends JpaRepository<User,Long> {/** 我们在这里直接继承 JpaRepository* 这里面已经有很多现场的方法了,可以直接通过UserMapper.xxx()直接使用* 这也是JPA的一大优点** *///查询list@Query(value="select u.name,c.cid,c.company_name from user u ,company c where u.cid=c.cid",nativeQuery = true)List<Map<String,Object>> getUserCompanyList();//根据传入cid查询list@Query(value="select u.name,c.cid,c.company_name from user u ,company c where u.cid=c.cid and c.cid=(:cid)",nativeQuery = true)List<Map<String,Object>> getUserCompanyListByCid(@Param("cid") Long cid);}
①注意上面,自己扩展的方法,是需要用@Query来进行编写sql语句的,同样如果是想写修改/删除,则需要额外加上注解@Modifying,这些可以额外去网上了解,这里只拿联合查询及运用map来接收数据做介绍。
②传参,可以细看上面代码里面的规则(cid参数)。
service层相关代码,UserService.java:
List<Map<String,Object>> getUserCompanyList();List<Map<String,Object>> getUserCompanyListByCid(Long cid);
Impl里面的:
@Overridepublic List<Map<String,Object>> getUserCompanyList() {return userMapper.getUserCompanyList();}@Overridepublic List<Map<String, Object>> getUserCompanyListByCid(Long cid) {return userMapper.getUserCompanyListByCid(cid);}
写两个简单的测试接口(controller使用@RestController):
@Autowiredprivate UserService userService;@GetMapping("/getUserCompanyList")public String getUserCompanyList() {List<Map<String,Object>> list= userService.getUserCompanyList();String jsonStr=JSON.toJSONString(list);return jsonStr;}@GetMapping("/getUserCompanyListByCid")public String getUserCompanyListByCid() {List<Map<String,Object>> list= userService.getUserCompanyListByCid(4l);String jsonStr=JSON.toJSONString(list);return jsonStr;}
OK,我们接下来是测试下,这种方式的多表关联查询,
先往数据库的这两张表填充点数据,
company表:
user表:
启动项目,调用接口 /getUserCompanyList:
调用接口/getUserCompanyListByCid :
好,关于JPA的多表关联查询操作,就介绍到这。
Springboot整合JPA 多表关联操作 @Query相关推荐
- SpringBoot使用JPA多表关联动态查询指定字段
SpringBoot使用JPA多表关联动态查询指定字段 目标需求 Maven依赖 项目结构 代码 运行结果 源码下载 目标需求 在SpringBoot中用JPA实现多表关联动态查询,并且只查询指定字段 ...
- SpringData JPA多表关联操作
目录 1 关联映射操作 1.1 多表之间的关系和操作多表的操作步骤 1.1.1 @OneToMany: 1.1.2 @ManyToOne 1.1.3 @JoinColumn 1.2 一对多的关联关系 ...
- Springboot整合JPA
文章目录 JPA技术 常用注解 Springboot整合JPA 1.引入JPA依赖 2.配置 3.启动类 4.实体类 5.定义接口和数据库交互(dao) 6.JPA中使用原生态的SQL语句 7.Tes ...
- springboot整合JPA+MYSQL+queryDSL数据增删改查
Spring Boot Jpa 是 Spring 基于 ORM 框架.Jpa 规范的基础上封装的一套 Jpa 应用框架,可使开发者用极简的代码即可实现对数据的访问和操作.它提供了包括增删改查等在内的常 ...
- (二)SpringBoot 整合 JPA
一.JPA简介 JPA(java persistence api)并不是一个框架,而是一组规范.Hibernate.TopLink.OpenJPA都实现了JPA规范,不过Hinernate最成功).所 ...
- jpa多表关联查询_JPA【关联查询篇】
摘要:本文主要介绍JPA的多表关联查询(一对一.一对多.双向关联.多对一.多对多)以及N+1查询的优化. 1. JPA多表关联查询 多表关联查询就是实现使用一个实体类对象操作或者查询多个表的数据. 配 ...
- Springboot整合JPA多数据源(Oracle+Mysql)
Springboot整合JPA多数据源 1. Maven 2. 基本配置 2.1 DataSource 3. 多数据源配置 3.1 JpaConfigOracle 3.2 JpaConfigMysql ...
- jpa多表关联条件查询实现
通过实体类映射实现多表关联条件查询 jpa对于多表关联可以在实体类中进行关联映射,一对一用@OneToOne,一对多用@OneToMany,多对多用@ManyToMany,多对一用@ManyToOne ...
- Spring Data JPA 多表关联查询的实现
Spring Data JPA 多表关联查询的实现 多表查询在spring data jpa中有两种实现方式,第一种是利用hibernate的级联查询来实现,第二种是创建一个结果集的接口来接收连表查询 ...
最新文章
- win10用什么软件测试硬件,Win10系统下硬件设备检测工具的使用方法
- spacy spaCy主要功能包括分词、词性标注、词干化、命名实体识别、名词短语提取等等
- cad打开图纸流程图_如何打开cad图纸?cad怎么打开pdf的图纸?
- mariab修改mysql端口_修改mysql/MariaDB数据库的端口号+远程
- why fioriSandboxConfig.json is loaded twice
- 在ie6下实现position-fixed的效果--------续集---对联效果(02)
- springMVC两种方式实现多文件上传及效率比较
- Linux 配置网络
- 0920 - 积极休息
- C语言求素数/质数最高效的方法
- DNS:解析域资源记录(A, AAAA, PTR, SOA, NS, CNAME, MX)
- POI读取Excel表格时遇到科学计数法处理
- <论文阅读> M2BEV Multi-Camera Joint 3D Detection and Segmentation with Unified Bird’s-Eye View Represen
- python 用泽勒算法计算该天是星期几
- 马哥教育42期第二周作业
- 暴风集团入多个被执行人名单-千氪
- 关于帮助他人,别跟自己较劲
- 经济基础知识(初级)【6】
- Ubuntu下N卡配置无法保存的解决办法
- Python求函数导数并绘制切线