我想要实现分页查询,用的是Hibernate 4,方法原型如下: /**
* 分页获取所有模型对象
* @param pn 页码 从1开始
* @param pageSize 每页记录数
* @return
*/
public List<User> listAll(int pn, int pageSize);
* 分页获取所有模型对象
* @param pn 页码 从1开始
* @param pageSize 每页记录数
* @return
*/
public List<User> listAll(int pn, int pageSize);
Class.forName(this.getEntity()));
if (object != null) {
criteria.add(Example.create(object).enableLike());
}
int rowCount = (Integer) criteria.setProjection(Projections.rowCount())
.uniqueResult();
criteria.setProjection(null);
criteria.setFirstResult((pageNo - 1) * pageSize);
criteria.setMaxResults(pageSize);
List result = criteria.list();
criteria.setFirstResult((pageNo - 1) * pageSize);
自己看对应的api说明。
query.setFirstResult(pn);
query.setMaxResults(pageSize);
return query.list();
看看我这篇文章:
http://blog.csdn.net/qq183293/article/details/7884127
一个是计算从哪行开始查询 和一次查询多少行
我刚用hiernate4 做的完整代码public class PagingDaoHibernate implements PagingDao { // 定义sessionfactory对象
private SessionFactory sessionFactory; /**
* @param sessionFactory
* 注入sessionfactory
*/
public void setSessionFactory(SessionFactory sessionFactory) {
this.sessionFactory = sessionFactory;
} /* (non-Javadoc)
* @see esw.led.dao.PagingDao#queryForPage(java.lang.String, int, int)
* @param hql 查询数据库
* @param offset 从第几行查询数据库
* @param length 查询多少行数据
*/
@Override
public List queryForPage(String hql, int offset, int length) {
// TODO Auto-generated method stub
// 初始化事务
Transaction tx = null;
List list = null;
// 实例化session
Session session = sessionFactory.getCurrentSession();
try {
// 实例化事务
tx = session.getTransaction();
// 开始事务
tx.begin();
// 执行sql文 login
Query q = getSession().createQuery(hql);
q.setFirstResult(offset);
q.setMaxResults(length);
list = q.list(); tx.commit(); } catch (Exception e) {
e.printStackTrace();
// 如果事务失败 回滚
if (tx != null && tx.isActive()) {
try {
// 回滚
tx.rollback();
} catch (HibernateException e1) {
e1.printStackTrace();
}
}
}
return list; } /* (non-Javadoc)
* @see esw.led.dao.PagingDao#getAllRowCount(java.lang.String)
*
*
* @param hql_count 查询数据库中一共有多少行数据
*/
public Session getSession() {
//事务必须是开启的(Required),否则获取不到
return sessionFactory.getCurrentSession();
}
//查询一共多少数据
public long getAllRowCount(String hql_count) {
// 实例化session
long count = 0 ;
Session session = sessionFactory.getCurrentSession();
Transaction tx = null;
try {
// 实例化事务
tx = session.getTransaction();
// 开始事务
tx.begin();
Query query = getSession().createQuery(hql_count);
List list = query.list();
count=(Long)query.list().get(0);
tx.commit(); } catch (Exception e) {
e.printStackTrace();
// 如果事务失败 回滚
if (tx != null && tx.isActive()) {
try {
// 回滚
tx.rollback();
} catch (HibernateException e1) {
e1.printStackTrace();
}
}
} return count;
}
}
这个是dao层的
再看看这篇文章 http://wenku.baidu.com/view/7eaa66ee998fcc22bcd10d89.html
service 层要计算的
也可以这样子getSession().createQuery("***").setFirstResult(from).setMaxResults(maxCols).list()
criteria.setProjection(null);
criteria.setFirstResult((pageNo - 1) * pageSize);
自己看对应的api说明。
q.setFirstResult(begin);
q.setMaxResult(maxNumber);
q.list();