本發(fā)明涉及電子信息及數(shù)據(jù)處理技術(shù)領域,具體涉及一種數(shù)據(jù)訪問的查詢方法。
背景技術(shù):
ecp企業(yè)管理平臺是一個管理體系,是企業(yè)現(xiàn)實運營中使用的有形和無形相結(jié)合的管理體系。在這個平臺上能夠充分保證企業(yè)自己的管理思想、管理理念、管理方法、管理工具、企業(yè)流程、規(guī)章制度、激勵機制的實現(xiàn)。這個平臺,最主要的作用就是要充分的發(fā)揮企業(yè)內(nèi)外部資源的利用效率,其核心的任務則是保證企業(yè)目標、任務和結(jié)果的實現(xiàn)。其中,數(shù)據(jù)的查詢ecp系統(tǒng)中重要和關鍵的環(huán)節(jié)。
在傳統(tǒng)的數(shù)據(jù)訪問編碼模式下,編寫查詢語句需要寫一系列的查詢語句,其開發(fā)模式訪問數(shù)據(jù)庫,一般是按以下步驟得到查詢結(jié)果:
步驟1:定義一個查詢sql字符串;
步驟2:定義該sql語句相關參數(shù)值;
步驟3:使用jdbc相關api預編譯sql;
步驟4:設置好sql參數(shù)執(zhí)行查詢;
上述查詢方式,代碼量大,耗時耗力且代碼不夠清晰,和hibernate、jpa、jdo、toplink等數(shù)據(jù)持久化框架的兼容性不高。
技術(shù)實現(xiàn)要素:
本發(fā)明旨在提供一種通過fitler模型及注解擴展實現(xiàn)ecp平臺數(shù)據(jù)訪問的查詢方法。本發(fā)明采取如下的技術(shù)方案:
一種通過fitler模型及注解擴展實現(xiàn)ecp平臺數(shù)據(jù)訪問的查詢方法,包括如下步驟:
(1)定義一個查詢對象,并繼承filtermodel;
(2)在查詢對象屬性上面標注filter查詢注解;
(3)將該查詢對象交由數(shù)據(jù)訪問層翻譯成sql或者hql后查詢。
本發(fā)明提供的查詢方法,支持采用注解的方式代替拼湊字符串來構(gòu)造查詢語句,這樣既節(jié)省了編碼人員的代碼量,又可以使代碼看起來更加清晰,讓代碼顯得更規(guī)范(盡量讓代碼中少出現(xiàn)sql語句),并且可以方便集成hibernate、jpa、toplink、jdo等數(shù)據(jù)持久化框架。
附圖說明
圖1為本發(fā)明提供的通過fitler模型及注解擴展實現(xiàn)ecp平臺數(shù)據(jù)訪問的查詢方法的流程圖。
具體實施方式
下面結(jié)合附圖和具體實施方式詳細說明本發(fā)明。
如圖1所示,本實施例提供的ecp平臺數(shù)據(jù)訪問的查詢方法,通過fitler模型以及注解擴展,用注解方式代替原有傳統(tǒng)字符串的拼湊來實現(xiàn)數(shù)據(jù)訪問,包括如下步驟:
步驟1:定義一個查詢對象,它繼承filtermodel;
步驟2:在查詢對象屬性上面標注filter查詢注解;
步驟3:將該查詢對象交由數(shù)據(jù)訪問層翻譯成sql或者hql后查詢。
實現(xiàn)上述查詢方法的示例代碼如下:
1、定義一個查詢對象,它繼承filtermodel:
filtermodel包路徑com.ygsoft.ecp.core.framework.model.filtermodel
publicclassbookfiltermodelextendsfiltermodel
2、在查詢對象屬性上面標注filter查詢注解:
3、將該查詢對象交由數(shù)據(jù)訪問層進行查詢:
/**
*根據(jù)鍵值及分頁信息返回一個列表
*
*@paramcontext
*上下文
*@paramfilter
*過濾條件
*@parampageindex
*頁索引
*@parampagesize
*頁大小
*@return某一頁的列表
*/
@context
@contextdesc
list<vo>findlistbyfilter(finaliecpdatacontextcontext,finalfiltermodelfilter,finalintpageindex,finalintpagesize);
本實施例對上述實現(xiàn)過程進行了測試和驗證,證明其確實是可行的。進行驗證的測試代碼如下:
iecpdatacontextdatacontext=datacontextutil.getcurrentdatacontext();
bookfiltermodelfilter=newbookfiltermodel();
//測試單條件and(bname=”java”)
filter.setbname(”java”);
list<bookvo>datalist=role.findlistbyfilter(datacontext,filter,1,10);
assertequals(10,datalist.size());
//測試二個條件and(bname=”java”andbprice=2)
filter.set(“bprice”,newdouble(2));
datalist=role.findlistbyfilter(datacontext,filter,1,10);
assertequals(1,datalist.size());
//測試三個條件and,有一個條件是主鍵(bid=”2”andbname=”java”andbprice=2)
filter.set(“bid”,“2”);
datalist=role.findlistbyfilter(datacontext,filter,1,10);
//測試主鍵條件in,參數(shù)值用數(shù)組(bidin(“1”,”2”,”3”)andbname=”java”)
filter=newbookfiltermodel();
filter.setbname(“java”);
filter.set(“bid”,newstring[]{“1”,”2”,”3”});
datalist=role.findlistbyfilter(datacontext,filter,1,10);
assertequals(3,datalist.size());
//測試非主鍵條件in,參數(shù)值用list(bpricein(2,3,4,5,6)andbname=”java”)
filter=newbookfiltermodel();
filter.setbname(“java”);
list<double>price=newarraylist<double>();
price.add(newdouble(2));
price.add(newdouble(3));
price.add(newdouble(4));
price.add(newdouble(5));
price.add(newdouble(6));
filter.set(“bprice”,price);
datalist=role.findlistbyfilter(datacontext,filter,1,10);
assertequals(5,datalist.size());
//測試多個條件in(bidin(“1”,”2”,”3”)andbpricein(2,3,4,5,6))
filter.set(“bid”,newstring[]{“1”,”2”,”3”});
datalist=role.findlistbyfilter(datacontext,filter,1,10);
assertequals(2,datalist.size());
//測試單條件isnull查詢(bnameisnull)
filter=newbookfiltermodel();
datalist=role.findlistbyfilter(datacontext,filter,1,10);
assertequals(10,datalist.size());
//測試多條件isnull查詢(bidin(“21”,”22”)andbnameisnull)
filter.set(“bid”,newstring[]{“21”,”22”});
datalist=role.findlistbyfilter(datacontext,filter,1,10);
assertequals(2,datalist.size());
//測試多個isnull條件查詢(bidisnullandbnameisnull)
filter.set(“bid”,null);
datalist=role.findlistbyfilter(datacontext,filter,1,10);
assertequals(0,datalist.size());
以上實施例僅用以說明本發(fā)明的技術(shù)方案而非對其限制,盡管參照上述實施例對本發(fā)明進行了詳細的說明,所屬領域的普通技術(shù)人員應當理解,依然可以對本發(fā)明的具體實施方式進行修改或者等同替換,而未脫離本發(fā)明精神和范圍的任何修改或者等同替換,其均應涵蓋在本發(fā)明的揭露范圍之內(nèi)。