spring data jpa hql動態查詢案例

2022-07-13 08:39:11 字數 1827 閱讀 1356

目的:根據入參條件不同,動態組裝hql裡的where語句。

1. 實現**

public listquerystatiscriteriabuilder(string starttime, string endtime, string collectname,

string imei) 

if(stringutils.isnotempty(collectname))

if(stringutils.isnotempty(imei) && !imei.equals("all"))

predicate predicates = new

predicate[predicatelist.size()];

predicates =predicatelist.toarray(predicates);

//加上where條件

query.where(predicates);

//指定查詢項,select後面的東西

expressiontimestr = cb.function("date_format", string.class, timepath, cb.parameter(string.class, "formatstr"));//

格式化日期

query.multiselect(timestr,statisname,statisnum, statisrate);//

返回列//

query.groupby(root.get(conditionname),timestr);

//分組

//排序

typedquerytypedquery =entitymanager.createquery(query);

typedquery.setparameter("formatstr", constant.statis_day);

list =typedquery.getresultlist();

} catch

(parseexception e)

return

list;

}

constant.statis_day值為:

%y-%m-%d按天格式化,執行完成列印的sql為:

select date_format(statisenti0_.create_time, ?) as

col_0_0_,

statisenti0_.statis_name

ascol_1_0_,

statisenti0_.statis_num

ascol_2_0_,

statisenti0_.statis_rate

ascol_3_0_

from

statis statisenti0_

where (statisenti0_.create_time between ? and

?)

and statisenti0_.collect_name=

?

and statisenti0_.kepler_version=

?

and statisenti0_.device_brand=

?

and statisenti0_.rom_version=

?

and statisenti0_.alipay_version=?

2. 包裝類wrapstatis.class為

public

class

wrapstatis

靜態查詢和動態查詢

參考 首先無論是靜態查詢還是動態查詢,都要有查詢的物件,也就是包含很多同型別資料的 表 這個 表 可以理解為乙個由同型別資料元素組成的乙個 集合 該集合可以用各種容器來儲存,例如陣列 鍊錶 樹等,我們統稱這些儲存資料的資料結構為 查詢表。可見,查詢表有時是我們傳統意義的表,有時候是很複雜的一種結構。...

動態分組查詢

示例資料 create table 表 id int,num int insert 表 select 1,2 union all select 2,3 union all select 3,2 union all select 4,2 union all select 5,12 union all ...

動態分組查詢

示例資料 create table 表 id int,num int insert 表 select 1,2 union all select 2,3 union all select 3,2 union all select 4,2 union all select 5,12 union all ...