現有如下場景,需要根據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的其中乙個...