关于分页有两种考虑:
-
spring+hibernate 分页
- public List findPageMessage(final String sql, final int firstRow, final int maxRow) {
- return hibernatetemplate.executeFind( new HibernateCallback() {
- public Object doInHibernate(Session s) throws HibernateException, SQLException {
- Query query = s.createQuery(sql);
- query.setFirstResult(firstRow);
- query.setMaxResults(maxRow);
- List list = query.list();
- return list;
- }
- });
- }
/**
* @Description: TODO(/hql的分页的实现)
* @param @param queryStr sql语句的前缀
* @param @param params
* @param @param pageBean sql语句中要加的的参数,有开始行数和显示和行数等参数
* @param @return 设定文件
* @return List 返回类型 是要显示的list
* @throws
*/
protected List getPage(final String queryStr, final Object[] params,
final PageBean pageBean) {
return this.getHibernateTemplate().executeFind(new HibernateCallback() {
public Object doInHibernate(Session session)
throws HibernateException, SQLException {
Query query = session.createQuery(queryStr);
// query.setCacheable(true);
for (int i = 0; i < params.length; i++) {
query.setParameter(i, params[i]);
}
if (pageBean != null && pageBean.getPageSize() > 0) {
query.setMaxResults(pageBean.getPageSize());
query.setFirstResult(pageBean.getCurrentPageFirstRecord());
int recordCount = count(queryStr, params);
pageBean.setRecordCount(recordCount);
if((pageBean.getPageCount() - 1) * pageBean.getPageSize() > recordCount){
pageBean.setCurrentPage(1);
}
}
return query.list();
}
});
}
这种方法是有多个参数的,可以是一个参数的。可以是没有参数的,这样就可以直接到数据库提取数据,在datasource层设置了发言这个概念,这样有利于数据sql语句的分别调用。例如mysql的里limit的字段,limit 2,4;(从第二个结果集开始数4个结果显示出来等)