Spring data jpa多表查多條件查詢

2021-08-13 07:09:15 字數 2492 閱讀 7028

現有如下場景,需要根據a表的check_code欄位和b表的store_code、check_result欄位組合查詢,a表與b表的關聯關係為一對多。 

為了簡化查詢引數,我們對查詢引數進行了封裝,抽出了公共的querycondition:

public

class querycondition;

public

querycondition(int page, int limit)

public specificationgetwhereclause() };}

public pageable getpagerequest()

return

new pagerequest(page - 1, limit);

}public criteria buildpageablecriteria(criteria c)

public

intgetpage()

public

void

setpage(int page)

public

intgetlimit()

public

void

setlimit(int limit)

}

在公共querycondition的基礎上,我們封裝了個性化的aquerycondition:

public

class aquerycondition extends querycondition catch (unsupportedencodingexception e)

return key;

}public string tocountkey() catch (unsupportedencodingexception e)

return key;

}public specificationgetwhereclause()

if (stringutils.isnotblank(storecode))

query.groupby(root.get("pkg")).orderby(cb.desc(root.get("createtime")));

return cb.and(list.toarray(new predicate[list.size()]));}};

}public string getcheckcode()

public

void

setcheckcode(string checkcode)

public string getstorecode()

public

void

setstorecode(string storecode)

}

由於在aquerycondition我們用到了a和b的左連線關聯查詢,因此需要我們在a中定義和b的一對多關係。

@onetomany

@joincolumn(name = "pkg", referencedcolumnname = "pkg", insertable = false, updatable = false)

private collectionbs = new arraylist();

到此,基礎工作做好了,接著我們看如何在controller、service、dao層進行呼叫。 

controller層我們通過aquerycondition接收查詢引數:

public @responsebody pageinfolist(aquerycondition cond)

在service層和dao層我們加了快取,這步可選,我們這裡是service層呼叫快取層:

@autowired

private cachedarepository arepository;

public pagepagefind(aquerycondition cond)

快取層我們呼叫aquerycondition的方法進行組合查詢:

public pagepagefind(final aquerycondition cond) 

@override

public string getcachegroups(pageo) ;

}});

}public

long

count(aquerycondition cond)

dao層我們進行公共方法的繼承和個性化方法的編寫:

@transactional

public

inte***ce

arepository

extends

jparepository

, jpaspecificationexecutor

到此,關於spring data jpa多表多條件查詢的實現步驟已經講解完畢,如何大家在實現過程中有疑問可以找我交流。

SpringData JPA多表查詢

物件導航查詢 查詢乙個物件的同時,通過此物件查詢他的關聯物件 前提得在實體類中配置它們的關聯關係 物件導航查詢 預設使用的是延遲載入的形式查詢 呼叫get方法並不會立即傳送查詢,而是在使用關聯物件的時候才會查詢 將延遲載入改為立即載入需要修改配置 fetch,需要配置到多表對映關係的註解上 priv...

spring data jpa實體繼承

spring jpa中我們要將sql對映到物件,尤其是在spring boot這種高度自動化的環境下使用,大量的最優目錄結構與命名規則可以大大降低配置,約定大於配置貫穿其中。例如我們定義查詢dao,繼承jparepository即可。然後返回的物件,我們可以定義model entity table ...

SpringData JPA分頁查詢

首先我們需要知道springdata jpa 的幾個介面 其實看名字就大概懂了,也可以很方便的使用 首先我們的持久化層繼承jparepository,相當於繼承了增刪改查的持久化層以及分頁查詢的持久化層 所以如果我們要使用分頁查詢 我們只需要直接呼叫 由一開始的圖也可以看到pageable的其中乙個...