封裝JPA的資料操作DAO類
阿新 • • 發佈:2019-02-06
對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列表,可指定取第幾行