Hibernate裏面如何使用DetachedCriteriaCriteria 實現多條件分頁查詢

WEB層:

// 獲取分頁的請求參數
String start = request.getParameter(“start”);
String page = request.getParameter(“page”);
String limit = request.getParameter(“limit”);

//獲取請求表單的值,然後根據值是否爲空,構件離線查詢條件。
String tb_zzid = request.getParameter(“tb_zzid”);
String zc_xmbh = request.getParameter(“zc_xmbh”);
String zy_xmbh = request.getParameter(“zy_xmbh”);
String zc_zcly = request.getParameter(“zc_zcly”);

DetachedCriteria criteria=DetachedCriteria.forClass(Zyzc.class);

if(tb_zzid !=null && !"".equals(tb_zzid))
{
criteria.add(Restrictions.like(“tb_zzid”, tb_zzid, MatchMode.ANYWHERE));
}
if(zc_xmbh !=null && !"".equals(zc_xmbh))
{
criteria.add(Restrictions.like(“zc_xmbh”, zc_xmbh, MatchMode.ANYWHERE));
}
if(zy_xmbh !=null && !"".equals(zy_xmbh))
{
criteria.add(Restrictions.like(“zy_xmbh”, zy_xmbh, MatchMode.ANYWHERE));
}
if(zc_zcly !=null && !"".equals(zc_zcly))
{
criteria.add(Restrictions.like(“zc_zcly”, zc_zcly, MatchMode.ANYWHERE));
}


然後就可以調用service層的方法

//獲取根據離線條件查詢的記錄;

es.getZyzcsByConditonPage( criteria,Integer.parseInt(page), Integer.parseInt(limit))

//獲取根據離線條件查詢的記錄總數;

es.getZyzcCountByCondition(criteria)


SERVICE層:

//調用DAO層方法
public long getZyzcCountByCondition(DetachedCriteria criteria) {
// TODO Auto-generated method stub
try
{
return zyzcDao.findCountByCondition(criteria);
}
catch (Exception e)
{
e.printStackTrace();
throw new ElecException(“獲取發電記錄列表出錯”);
}
}

//調用DAO方法獲取記錄總數
public List getZyzcsByConditonPage(DetachedCriteria criteria, int pageNo, int pageSize)
{

List result = new ArrayList();
try
{
List el = zyzcDao.findByConditionPage(criteria, pageNo, pageSize);
for (Object o : el)
{
Zyzc e = (Zyzc)o;
result.add(e);
}
return result;
}
catch (Exception e)
{
e.printStackTrace();
throw new ElecException(“獲取發電記錄列表出錯”);
}
}


DAO層:

//繼承hibernate4公共基礎類,獲取session,然後執行離線查詢;

public class ZyzcDAOImpl extends BaseDaoHibernate4 implements ZyzcDAO
{

public List findByConditionPage(DetachedCriteria criteria, int pageNo,int pageSize)
{
Criteria c =criteria.getExecutableCriteria(getSessionFactory().getCurrentSession());
// 執行分頁,並返回查詢結果
return c.setProjection(null)
.setFirstResult((pageNo - 1) * pageSize)
.setMaxResults(pageSize)
.list();
}

// 獲取查詢記錄結果總數,用於分頁;
public long findCountByCondition(DetachedCriteria criteria)
{
Criteria c =criteria.getExecutableCriteria(getSessionFactory().getCurrentSession());
c.setProjection(Projections.rowCount());
Long totalNum =(Long) c.uniqueResult();
return totalNum;
}

}


結果演示:

未設置任何條件時,顯示記錄總數量;

設置條件後,顯示查詢結果總數。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章