Hibernate里面如何使用DetachedCriteriaCriteria 实现多条件分页查询
2017-03-24 10:31
891 查看
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<Zyzc> getZyzcsByConditonPage(DetachedCriteria criteria, int pageNo, int pageSize)
{
List<Zyzc> result = new ArrayList<Zyzc>();
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<Zyzc> 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;
}
}
----------------------------------------------
结果演示:
未设置任何条件时,显示记录总数量;
设置条件后,显示查询结果总数。
// 获取分页的请求参数
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<Zyzc> getZyzcsByConditonPage(DetachedCriteria criteria, int pageNo, int pageSize)
{
List<Zyzc> result = new ArrayList<Zyzc>();
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<Zyzc> 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;
}
}
----------------------------------------------
结果演示:
未设置任何条件时,显示记录总数量;
设置条件后,显示查询结果总数。
相关文章推荐
- 使用Hibernate criteria进行分页查询时,如何实现一次查询取得总记录数和分页后结果集
- 应用Hibernate3的DetachedCriteria实现分页查询
- Hibernate使用原生的动态sql实现带条件的查询分页功能
- Hibernate-Criteria查询(3)DetachedCriteria构造查询条件、命名查询、原生SQL、调用存储过程(使用JDBC)
- 应用Hibernate3的DetachedCriteria实现分页查询
- Hibernate3的DetachedCriteria实现分页查询
- 应用Hibernate3的DetachedCriteria实现分页查询
- Hibernate查询,返回new对象(注意这个新定义的类要有构造函数),使用sql带条件分页查询并且把结果显示到一个对象的集里面的解决方案
- 应用Hibernate3的DetachedCriteria实现分页查询
- Hibernate查询,返回new对象(注意这个新定义的类要有构造函数),使用sql带条件分页查询并且把结果显示到一个对象的集里面的解决方案
- 应用Hibernate3的DetachedCriteria实现分页查询
- 灵活使用Hibernate的查询对象DetachedCriteria
- Hibernate之DetachedCriteria动态条件查询
- Union all的使用实现一条sql把不同表里面的数据查出来,或者按照不同的查询条件查出来的sql累加起来
- 使用MVC,实现多条件查询,排序与分页 的 存储过程
- DetachedCriteria离线查询离线查询---实现模糊查询 Hibernate
- 应用Hibernate3的DetachedCriteria实现分页查询
- DaoImpl中实现查询分页-使用HibernateCallback来做更加方便
- 使用ADF-BC 实现查询功能之八:通过代码动态设置Criteria条件参数
- Hibernate使用Criteria实现查询