spring-data多表多条件动态查询

一、表对应关系

1、HdTalent,HdStaffPool  多对一关系,其中HdTalent为多方,HdStaffPool  为一方。

2、HdTalentPool,HdTalent  多对一关系,其中HdTalentPool为多方,HdTalent  为一方。

3、由此HdTalentPool、HdStaffPool  组成多对多的关系。

二、需求描述

需要根据HdTalentPool中名称查询HdStaffPool  ,且HdStaffPool 的属性为动态条件查询。

三、实现过程

 

spring-data的的dao为Repsitory,需要继承JpaRepository,JpaSpecificationExecutor接口。如下图:

spring-data多表多条件动态查询_第1张图片

只需要调用findAll方法,传入动态参数即可。首先需要进行动态连接,关键代码如下:

List predicates = new ArrayList<>();

/// HdTalent,HdStaffPool表进行内联

Join talentJoin=root.join("hdTalents",JoinType.INNER);

// HdTalentPool,HdTalent表进行内联

Join talentPoolJoin =talentJoin.join("hdTalentPool",JoinType.INNER);

predicates.add(cb.like(talentPoolJoin.get("talentName"),conditions.get("talentName").toString()));

备注:3张表建立1对多的关系。参考百度搜索OnetoMany与ManyToOne有很多资料。

完整代码截图如下:

spring-data多表多条件动态查询_第2张图片

四、JUNIT测试过程

测试代码

spring-data多表多条件动态查询_第3张图片

执行结果

spring-data多表多条件动态查询_第4张图片

五、ManyToOne与OneToMany

ManyToOne

spring-data多表多条件动态查询_第5张图片

OneToMany

spring-data多表多条件动态查询_第6张图片

你可能感兴趣的:(JAVA)