天天看點

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多表多條件動态查詢

隻需要調用findAll方法,傳入動态參數即可。首先需要進行動态連接配接,關鍵代碼如下:

List<Predicate> predicates = new ArrayList<>();

/// HdTalent,HdStaffPool表進行内聯

Join<HdTalent,HdStaffPool> talentJoin=root.join("hdTalents",JoinType.INNER);

// HdTalentPool,HdTalent表進行内聯

Join<HdTalentPool,HdTalent> talentPoolJoin =talentJoin.join("hdTalentPool",JoinType.INNER);

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

備注:3張表建立1對多的關系。參考百度搜尋OnetoMany與ManyToOne有很多資料。

完整代碼截圖如下:

spring-data多表多條件動态查詢

四、JUNIT測試過程

測試代碼

spring-data多表多條件動态查詢

執行結果

spring-data多表多條件動态查詢

五、ManyToOne與OneToMany

ManyToOne

spring-data多表多條件動态查詢

OneToMany

spring-data多表多條件動态查詢