目的:根據入參條件不同,動態組裝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, ?) ascol_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為
publicclass
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 ...