通过实体类映射实现多表关联条件查询

jpa对于多表关联可以在实体类中进行关联映射,一对一用@OneToOne,一对多用@OneToMany,多对多用@ManyToMany,多对一用@ManyToOne,具体实体类配置就不多说了,然后对于条件查询采用Specification对象进行封装,如下

Specification<A> specification = new Specification<A>() {@Overridepublic Predicate toPredicate(Root<A> root, CriteriaQuery<?> query, CriteriaBuilder cb) {//创建查询条件集合List<Predicate> orlist = new ArrayList<Predicate>();//判断是否模糊查询if (StringUtils.isNotBlank(key)){//添加查询条件  cb.like:模糊查询   root.get("查询字段").as(类型.class)orlist.add(cb.like(root.get("name").as(String.class),"%"+  key + "%"));orlist.add(cb.like(root.get("phone").as(String.class), "%"+  key + "%"));orlist.add(cb.like(root.get("role").as(String.class),"%"+  key + "%"));//创建左外连接  Join<左,右>     root.join("副表实体在主表主体中的属性名",连接方式)Join<A,B> join = root.join("b", JoinType.LEFT);//将连接表需要查询的字段写入orlist.add(cb.like(join.get("post").as(String.class),"%"+key+"%"));}return  cb.or(orlist.toArray(new Predicate[orlist.size()]));}};

通过@Query(value=“sql语句”)方式实现表关联查询

创建ARepository接口然后继承JpaRepository和JpaSpecificationExecutor,然后在repository接口中编写查询方法,如下

public interface ARepository extends JpaRepository<A,String> , JpaSpecificationExecutor<A> {@Query(value="SELECT * " +"FROM A_table a " +"LEFT JOIN B_table b ON a.b_unid = b.unid " +"LEFT JOIN C_table c ON a.c_unid = c.unid " +"WHERE a.delete_flag = 0 " +"AND (?1 is null or ?1='' or a.b_unid = ?1 )" +"AND (?2 is null or ?2='' or a.c_unid = ?2 ) " +"AND (?3 is null or ?3='' or a.created_time >= ?3 ) " +"ORDER BY fqcm.created_time DESC",nativeQuery = true)List<Map> selectABC(String bUnid, String cUnid, String createdTimeStart);}

@Query中?!,?2,?3代表传递的参数,应和下边方法中的参数顺序保持一致,其中条件

AND (?1 is null or ?1='' or a.b_unid = ?1 )

表示参数如果为空字符串或者null时条件不生效,不为空字符串和null时条件生效。
nativeQuery = true 表示可以执行原生的sql语句。

结束语

以上是自己在做jpa多表关联是使用的方法,做一下记录。

jpa多表关联条件查询实现相关推荐

  1. SpringBoot使用JPA多表关联动态查询指定字段

    SpringBoot使用JPA多表关联动态查询指定字段 目标需求 Maven依赖 项目结构 代码 运行结果 源码下载 目标需求 在SpringBoot中用JPA实现多表关联动态查询,并且只查询指定字段 ...

  2. jpa多表联查动态_Spring Data JPA 连表动态条件查询

    多表查询在spring data jpa中有两种实现方式,第一种是利用hibernate的级联查询来实现(使用较为复杂,查询不够灵活),第二种是使用原生sql查询. JPA原生SQL连表查询 @Rep ...

  3. jpa多表关联查询_JPA【关联查询篇】

    摘要:本文主要介绍JPA的多表关联查询(一对一.一对多.双向关联.多对一.多对多)以及N+1查询的优化. 1. JPA多表关联查询 多表关联查询就是实现使用一个实体类对象操作或者查询多个表的数据. 配 ...

  4. jpa多表联查动态_jpa多表关联动态查询(自定义sql语句)

    项目中,jpa对于简单的数据库操作很方便,但如果多表关联动态查询时,需要自己去写SQL语句拼接查询条件,以下为本人学习的例子. 类似于这种多条件动态查询: 项目用的是springboot 2.1.0. ...

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

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

  6. JPA以外键为条件查询出的List(外键过滤并存入JSONObject)

    JPA以外键为条件查询出的List(外键过滤并存入JSONObject) 一.Service层 1.service接口 package com.lz_nms.service;​import net.s ...

  7. springDataJpa入门教程(5)-单表动态条件查询+分页

    springDataJpa入门教程 springDataJpa入门教程(1)-基于springBoot的基本增删改查 springDataJpa入门教程(2)-Specification动态条件查询+ ...

  8. oracle两表联查分组,oracle解决多表关联分组查询问题

    做了一个功能需要分组查询,同时查询A表分组查询的ID需要关联B表的数据,本来想两个表关联查询,但是报group by 语法不正确.所以做了以下修改. select count(*), cindexid ...

  9. mybitsPlus QueryWrapper表关联分页查询

    mybitsPlus QueryWrapper表关联分页查询 一. 描述 项目中用到页面查询,并且涉及到两个表分页查询,搜索条件涉及到两个表. 二. 思路 1.Mapper中自定义表关联的SQL,传入 ...

最新文章

  1. Spark2.x写入Elasticsearch的性能测试
  2. UITableView——reloadData与reloadSection性能比较
  3. java中jquery怎么学,jQuery动画+实例
  4. Python Web学习笔记之TCP的3次握手与4次挥手过程
  5. hdu 4639 2013多校第四场 hehe Fibonacci 数列,组合计数,字符串处理
  6. 前端菜鸡之路——网页上的图标
  7. linuxpython23同时_linux上安装python3同时保留python2
  8. FROONT – 超棒的可视化响应式网页设计工具
  9. 计算机网络之传输层:2、UDP协议
  10. android触摸滑动监听,Android 滑动监听的实例详解
  11. PLC控制步进电机在机床自动线中的应用
  12. 最新VS2012破解 序列号,vs2012旗舰版密钥序列号【收藏】
  13. 原生ajax上传获取进度,ajax上传图片获取进度
  14. 怎样在Axure中创建高保真的Axure原型(二)
  15. HDU 3533 Escape
  16. GMCM2017-前景目标提取
  17. Android 设备之间通过 Wifi 传输文件的功能
  18. 2022-XTU程设练习1
  19. 2021年美容师(中级)考试资料及美容师(中级)新版试题
  20. Gym - 101653T Runes [模拟]

热门文章

  1. 2007年高考各地录取分数线-一本分数线-二本分数线
  2. linux查看ip命令eth0,执行命令取出linux中eth0的IP地址
  3. 金融危机怎么爆发?如何化解危机?《行动的勇气》书籍推荐!
  4. Spring自动装配的方式
  5. 控制Android充电震动的代码,Android编程实现手机震动功能的方法
  6. Linux--数据链路层--ARP协议--0319-21
  7. 2012年度十大杰出IT博客[nice]
  8. Python安装pip命令
  9. glViewport含义
  10. IPMI管理工具使用方法