1. 程式人生 > >封裝JPA的資料操作DAO類

封裝JPA的資料操作DAO類

對JPA的實體操作進行了簡單的封裝,降低了資料操作的難度,提高了開發的效率。裡面可能會有少許hibernate的元素。

DAO.java

package com.posoftframework.dao;import java.util.LinkedHashMap;import java.util.List;import java.util.Map;import javax.persistence.EntityManager;import com.posoftframework.entity.base.BaseEO;/**
 * 底層資料操作的工具類
 * 
 * @author yongtree
 * @date 2009-4-30 上午08:55:32
 * @version 2.0
 * @since 2.0 泛型T挪到方法宣告出,宣告物件時不需要指定泛型.
 */
publicinterface DAO {/** * 清除一級快取的資料 */publicvoid clear();/** * 新增實體 * * @param entity * 實體 */public<T extendsBaseEO>void create(T entity);/** * 批量新增實體 * * @param entitys * 實體列表 */public<T extendsBaseEO>void createBatch
(List<T> entitys);/** * 更新實體 * * @param entity * 實體 */public<T extendsBaseEO>void update(T entity);/** * 刪除實體 * * @param entityClass * 實體類 * @param entityid * 實體id */public<T extendsBaseEO>void
delete(Class<T> entityClass,Object entityid);/** * 刪除實體 * * @param entityClass * 實體類 * @param entityids * 實體id陣列 */public<T extendsBaseEO>voiddelete(Class<T> entityClass,Object[] entityids);/** * 根據條件刪除 * * @author slx * @date 2009-11-24 下午05:52:04 * @modifyNote * @param entityClass * @param where * @param delParams */public<T extendsBaseEO>void deleteByWhere(Class<T> entityClass,Stringwhere,Object[] delParams);/** * 獲取實體 * * @param <T> * @param entityClass * 實體類 * @param entityId * 實體id * @return */public<T extendsBaseEO> T find(Class<T> entityClass,Object entityId);/** * 根據where條件查詢單個物件 * @author slx * @date 2010-7-19 上午10:33:20 * @modifyNote * @param <T> * @param entityClass * 型別 * @param where * 條件 * @param params * 引數 * @return */public<T extendsBaseEO> T findByWhere(Class<T> entityClass,Stringwhere,Object[]params);/** * 獲取實體,具有延遲載入的作用(和find相比) * * @param <T> * @param entityClass * 實體類 * @param entityId * 實體id * @return */public<T extendsBaseEO> T load(Class<T> entityClass,Object entityId);/** * 根據條件判斷實體是否存在 * * @author slx * @date 2009-7-8 上午11:49:13 * @modifyNote * @param entityClass * 實體類 * @param whereql * 查詢條件(可空,可為 field1=? and field2=? 形式,也可為field1='value1' and * field2='value2'的形式) * @param queryParams * 引數(可空,但是當條件使用了field1=? and field2=? 的形式後引數不能為空) * @return 是否存在 */public<T extendsBaseEO>boolean isExistedByWhere(Class<T> entityClass,String whereql,Object[] queryParams);/** * 獲取記錄總數 * * @param entityClass * 實體類 * @return */public<T extendsBaseEO>long getCount(Class<T> entityClass);/** * 根據條件和引數獲取記錄總數 * * @author slx * @date 2009-7-8 上午11:34:41 * @modifyNote * @param <T> * @param entityClass * 實體類 * @param whereql * 查詢條件(可空,可為 field1=? and field2=? 形式,也可為field1='value1' and * field2='value2'的形式) * @param queryParams * 引數(可空,但是當條件使用了field1=? and field2=? 的形式後引數不能為空) * @return 記錄行數 */public<T extendsBaseEO>long getCountByWhere(Class<T> entityClass,String whereql,Object[] queryParams);/** * 獲取分頁資料 * * @param <T> * @param entityClass * 實體類 * @param firstindex * 開始索引 * @param maxresult * 需要獲取的記錄數 * @return */public<T extendsBaseEO>QueryResult<T> getScrollData(Class<T> entityClass,int firstindex,int maxresult,String wherejpql,Object[] queryParams,LinkedHashMap<String,String>orderby);public<T extendsBaseEO>QueryResult<T> getScrollData(Class<T> entityClass,int firstindex,int maxresult,String wherejpql,List<Object> queryParams,LinkedHashMap<String,String>orderby);public<T extendsBaseEO>QueryResult<T> getScrollData(Class<T> entityClass,int firstindex,int maxresult,String wherejpql,Map<String,Object> queryParams,LinkedHashMap<String,String>orderby);/** * 查詢實體部分欄位,獲取分頁資料 * * 返回的結果將重新組裝到實體屬性中,沒有查詢的欄位為NULL<br> * 注意:使用該介面時,要確保實體類中有對應的查詢欄位的有引數構造方法,並且引數的順序要和此處的queryfields陣列的元素一致 * * @author yongtree * @date 2010-4-13 下午12:56:03 * @modifyNote * @param <T> * @param entityClass * @param queryfields * @param firstindex * @param maxresult * @param wherejpql * @param queryParams * @param orderby * @return */public<T extendsBaseEO>QueryResult<T> getScrollData(Class<T> entityClass,String[] queryfields,int firstindex,int maxresult,String wherejpql,Object[] queryParams,LinkedHashMap<String,String>orderby);public<T extendsBaseEO>QueryResult<T> getScrollData(Class<T> entityClass,String[] queryfields,int firstindex,int maxresult,String wherejpql,List<Object> queryParams,LinkedHashMap<String,String>orderby);public<T extendsBaseEO>QueryResult<T> getScrollData(Class<T> entityClass,String[] queryfields,int firstindex,int maxresult,String wherejpql,Map<String,Object> queryParams,LinkedHashMap<String,String>orderby);/** * 根據條件查詢實體中的指定幾個欄位 <br> * 返回結果List<String[]>格式如下: <br> * 行1: 欄位1value , 欄位2value , 欄位3value <br> * 行2: 欄位1value , 欄位2value , 欄位3value * * @author slx * @date 2009-5-14 下午01:14:23 * @modifyNote * @param <T> * @param entityClass * @param queryfields * @param wheresql * @param queryParams * @return */public<T extendsBaseEO>List<Object[]> queryFieldValues(Class<T> entityClass,String[] queryfields,String wheresql,Object[] queryParams);public<T extendsBaseEO>List<Object[]> queryFieldValues(Class<T> entityClass,String[] queryfields,String wheresql,Object[] queryParams,int startRow,int rows);/** * 根據條件查詢實體中的指定幾個欄位 <br> * 返回的結果將重新組裝到實體屬性中,沒有查詢的欄位為NULL<br> * 注意:使用該介面時,要確保實體類中有對應的查詢欄位的有引數構造方法,並且引數的順序要和此處的queryfields陣列的元素一致 * * @author yongtree * @date 2010-4-13 上午11:45:27 * @modifyNote * @param <T> * @param entityClass * @param queryfields * @param wheresql * @param queryParams * @return */public<T extendsBaseEO>List<T> queryByWhere(Class<T> entityClass,String[] queryfields,String wheresql,Object[] queryParams);public<T extendsBaseEO>List<T> queryByWhere(Class<T> entityClass,String[] queryfields,String wheresql,Object[] queryParams,int startRow,int rows);/** * 根據where條件查詢實體bean列表 <br> * where和queryParams可空 * * @author slx * @date 2009-5-14 下午01:20:19 * @modifyNote * @param <T> * @param entityClass * @param wheresql * @param queryParams * @return */public<T extendsBaseEO>List<T> queryByWhere(Class<T> entityClass,String wheresql,Object[] queryParams);/** * 根據where條件查詢實體bean列表,可指定取第幾行