本發(fā)明涉及Java EJB平臺(tái)技術(shù)領(lǐng)域,特別涉及一種基于EJB平臺(tái)的實(shí)體BEAN通用查詢方法。
背景技術(shù):
當(dāng)在Java EJB平臺(tái)下使用EntityManager類進(jìn)行多條件復(fù)雜查詢時(shí),容易導(dǎo)致代碼寫錯(cuò)。為此,需要一種方法以有效解決該問題。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明解決的技術(shù)問題在于提供一種基于EJB平臺(tái)的實(shí)體BEAN通用查詢方法;解決數(shù)據(jù)多條件復(fù)雜查詢時(shí)程序員寫HQL語句容易出錯(cuò)的問題。
本發(fā)明解決上述技術(shù)問題的技術(shù)方案是:
包含以下幾個(gè)步驟:
步驟一、創(chuàng)建實(shí)體對(duì)象查詢結(jié)果數(shù)據(jù)集類DataSet,將查詢出來的數(shù)據(jù)進(jìn)行封裝;
步驟二、創(chuàng)建查詢條件類QueryCondition,主要封裝字段名稱、參數(shù)類型、操作符、參數(shù)值及子查義條件;
步驟三、創(chuàng)建查詢條件設(shè)定類QueryConditionSetting,定義等于、大于、大于等于三個(gè)常量,及QueryCondition集合;同時(shí),提供AND查詢條件方法addAndQueryCondition,OR查詢條件方法addORQueryCondition,獲取查詢條件方法getQueryConditions;
步驟四、增加排序類OrderColumn,包括field字段與排序方向direction字段;
步驟五、創(chuàng)建排序設(shè)置類OrderBySetting,包括相關(guān)的常量ASC與DESC及變量List<OrderColumn>orderColumns;
步驟六、創(chuàng)建查詢工具類QueryTools,提供方法createQuery,封裝相關(guān)的sql語句,最后返回Query值;
步驟七、在客戶端調(diào)用對(duì)應(yīng)的Service類里面的findList方法得到DataSet值,然后通過dataSet.getList()方法返回所要的list集合數(shù)據(jù)。
將HQL語句中常用的WHERE、AND、OR、ORDER BY、LEFT JOIN關(guān)鍵字所涉及到的語句進(jìn)行封裝,在封裝的基礎(chǔ)上使用EJB的EntityManager類進(jìn)行查詢。
所述的步驟一封裝得數(shù)據(jù)包括總行數(shù)totalRows、每頁行數(shù)rowsPerPage、總頁數(shù)totalPages、當(dāng)前頁數(shù)pageIndex、及實(shí)體對(duì)象列表List<T>datas。
所述的步驟六創(chuàng)建查詢工具類QueryTools,同時(shí)提供另外方法getEntityListByStartPosition與getDataSetByStartPosition,getEntityListByStartPosition內(nèi)部使用return query.getResultList(),得到數(shù)據(jù)的list集合;getDataSetByStartPosition在getEntityListByStartPosition方法基礎(chǔ)上,使用DataSet類進(jìn)行封裝。
所述的findList方法封裝QueryTools里的getDataSetByStartPosition方法。
本發(fā)明的有益效果:當(dāng)我們使用EJB的EntityManager類進(jìn)行多條件復(fù)雜查詢時(shí),將其所用到HQL語句中常用的關(guān)鍵字如:WHERE、AND、OR、ORDER BY、LEFT JOIN等所相關(guān)的語句進(jìn)行封裝,從而達(dá)到簡化查詢、避免程序員寫HQL語句容易出錯(cuò)的目的。
附圖說明
下面結(jié)合附圖對(duì)本發(fā)明進(jìn)一步說明:
圖1為本發(fā)明的方法流程圖。
具體實(shí)施方式
如圖1所示,本發(fā)明采用如下步驟
步驟一、創(chuàng)建實(shí)體對(duì)象查詢結(jié)果數(shù)據(jù)集類DataSet,用于把查詢出來的數(shù)據(jù)進(jìn)行封裝;如:
步驟二、創(chuàng)建查詢條件類QueryCondition,主要封裝字段名稱、參數(shù)類型、操作符、參數(shù)值及子查義條件;如:
步驟三、創(chuàng)建查詢條件設(shè)定類QueryConditionSetting,定義了一些常量,如:等于、大于、大于等于等,及QueryCondition集合,并提供了添加and查詢條件方法addAndQueryCondition,or查詢條件方法addORQueryCondition,獲取查詢條件方法getQueryConditions等;如:
步驟四、增加排序類OrderColumn,有兩個(gè)字段:field字段與排序方向direction字段;如:
步驟五、創(chuàng)建排序設(shè)置類OrderBySetting,里面有相關(guān)的常量ASC與DESC及變量List<OrderColumn>orderColumns;如:
步驟六、創(chuàng)建查詢工具類QueryTools,里面提供了方法createQuery,封裝相關(guān)的sql語句,最后返回Query值,同時(shí)提供另外兩個(gè)重要的方法getEntityListByStartPosition與getDataSetByStartPosition,getEntityListByStartPosition內(nèi)部使用了return query.getResultList(),得到數(shù)據(jù)的list集合,而getDataSetByStartPosition則在getEntityListByStartPosition方法基礎(chǔ)上,使用DataSet類進(jìn)行了封裝,并最后返回DataSet值;如:
步驟七、使用方法:在客戶端調(diào)用對(duì)應(yīng)的Service類里面的findList方法,此方法封裝了QueryTools里的getDataSetByStartPosition方法,這樣就可以得到DataSet值,然后通過dataSet.getList()方法返回所要的list集合數(shù)據(jù)。如:
假如有一個(gè)請(qǐng)假類ApplyLeave:要從數(shù)據(jù)庫里查詢其List集合數(shù)據(jù)datas,創(chuàng)建如下方法: