JAVA技巧:用泛型與反射技術(shù)封裝分頁(yè)功能

字號(hào):

DAO.java
    public interface DAO {
    /**
    * 1.獲取所要顯示的分頁(yè)數(shù)據(jù)(一般以list形式來(lái)存放)
    * 2.獲取記錄的總數(shù)(計(jì)算總頁(yè)數(shù))
    * 3.需要定義一個(gè)返回類型,獲取兩個(gè)參數(shù)
    * @param
    * @param entityClass 實(shí)體類
    * @param firstindex 開(kāi)始索引
    * @param maxresult 需要獲取記錄數(shù)
    * @return
    */
    public QueryResult getScrollData(Class entityClass, int firstindex, int maxresult);}
    QueryResult.java(需要定義一個(gè)返回類型,獲取兩個(gè)參數(shù))
    package com.itcast.bean;
    import java.util.List;
    public class QueryResult {
    private List resultlist;
    private long totalrecord;
    public List getResultlist(){
    return resultlist;
    }
    public void setResultlist(List resultlist) {
    this.resultlist = resultlist;
    }
    public long getTotalrecord() {
    return totalrecord;
    }
    public void setTotalrecord(long totalrecord) {
    this.totalrecord = totalrecord;
    }
    }
    DaoSupport.java
    import com.itcast.bean.QueryResult;
    public abstract class DaoSupport implements DAO {
    @SuppressWarnings("unchecked")
    @Override
    @Transactional(readOnly=true,propagation=Propagation.NOT_SUPPORTED)
    public QueryResult getScrollData(Class entityClass, int firstindex, int maxresult) {
    //創(chuàng)建查詢對(duì)象
    QueryResult qr = new QueryResult();
    //獲取實(shí)體名稱
    String entityname = getEntityName(entityClass);
    Query query = em.createQuery("select o from "+entityname+" o");
    query.setFirstResult(firstindex).setMaxResults(maxresult);
    qr.setResultlist(query.getResultList());
    query = em.createQuery("select count(o) from "+entityname+" o");
    qr.setTotalrecord((Long)query.getSingleResult());
    return qr;
    }
    /**
    * 獲取實(shí)體名稱
    * @param
    * @param entityClass實(shí)體類
    * @return
    */
    protected String getEntityName(Class entityClass){
    String entityname = entityClass.getSimpleName();
    Entity entity = entityClass.getAnnotation(Entity.class);
    if(entity.name()!=null && !"".equals(entity.name())){
    entityname = entity.name();
    }
    return entityname;
    }
    }