您的位置:首页 > 其它

hibernate分页

2016-03-25 16:14 393 查看
第一种:

package com.ss.dao.imp;

import java.sql.SQLException;
import java.util.List;

import org.apache.commons.lang.StringUtils;
import org.hibernate.HibernateException;
import org.hibernate.Query;
import org.hibernate.Session;
import org.springframework.orm.hibernate3.HibernateCallback;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;

@SuppressWarnings("rawtypes")
public abstract class MyBaseDAOImpl extends HibernateDaoSupport  {

/**
* 加条件、分页查询所有对象,返回集合list
* @param where 拼接的sql
* @param orderby 排序
* @param params 参数
* @param start 开始页
* @param size
* @return
*/
public List search(final String where, final String orderby,final Object[] params, final int start, final int size) {
// 获取hibernate Query查询的sql语句
final String hql = getQueryHql();
// 执行查询方法,返回list集合
List list =  getHibernateTemplate().executeFind(new HibernateCallback() {
public Object doInHibernate(Session session)
throws HibernateException, SQLException {
StringBuffer sqlBuffer = new StringBuffer(hql);
// 拼接sql条件
if (StringUtils.isNotEmpty(where)) {
sqlBuffer.append(" and " + where);
}
if (StringUtils.isNotEmpty(orderby)) {
sqlBuffer.append(" order by " + orderby);
}
// 创建查询query对象
Query query = session.createQuery(sqlBuffer.toString());
session.flush();
if (null != params) {
int paramsCount = params.length;
for (int n = 0; n < paramsCount; n++) {
query.setParameter(n, params
);
}
}
if (start >= 0) {
query.setFirstResult(start);
}
if (size > 0) {
query.setMaxResults(size);
}
List list = query.list();
return list;
}
});
return list;
}

// 加条件查询所有对象,返回集合list
public List search(final String where, final String orderby,final Object[] params) {
return search(where, orderby, params, 0, 0);
}
/**
* 统计数据库表中数据总数
*/
public long getRecordCount(final String where, final Object[] params) {
// 获得统计查询的sql语句
final String hql = getQueryCountHql();
List list = getHibernateTemplate().executeFind(new HibernateCallback() {
public Object doInHibernate(Session session)
throws HibernateException, SQLException {
StringBuffer sqlBuffer = new StringBuffer(hql);

// 拼接sql条件
if (StringUtils.isNotEmpty(where)) {
sqlBuffer.append(" and " + where);
}
Query query = session.createQuery(sqlBuffer.toString());

if (null != params) {
int paramsCount = params.length;
for (int n = 0; n < paramsCount; n++) {
query.setParameter(n, params
);
}
}
List list = query.list();
return list;
}
});
if (list.size() == 0) {
return 0;
}
Object o = list.get(0);
return ((Long) o);
}
// hibernate Query查询的sql语句
public abstract String getQueryHql();
// 统计总数据的sql
public abstract String getQueryCountHql();

}


package com.demo.dao;

import org.springframework.stereotype.Component;

import com.fulongtech.vams.util.demo.dao.imp.MyBaseDAOImpl;

@Component
@SuppressWarnings("rawtypes")
public class MyScaffoldDao extends  MyBaseDAOImpl{

@Override
public String getQueryHql() {
return "from main.java.com.fulongtech.vams.scaffold.entity.Scaffold as vo where 1=1";
}

@Override
public String getQueryCountHql() {

return "select count(vo.id) from main.java.com.fulongtech.vams.scaffold.entity.Scaffold as vo where 1=1";
}

}


package com..vams.util.demo.controller;

import java.util.List;

import javax.annotation.Resource;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import com.fulongtech.vams.scaffold.entity.Scaffold;
import com.fulongtech.vams.scaffold.service.ScaffoldService;
import com.fulongtech.vams.util.demo.PageUtil;
import com.fulongtech.vams.util.demo.dao.MyScaffoldDao;
import com.fulongtech.vams.util.demo.dao.imp.MyBaseDAOImpl;

@SuppressWarnings("rawtypes")
@Controller
@RequestMapping("/scaffold")
public class MyScaffoldController extends MyBaseDAOImpl{

@Resource
private MyScaffoldDao myScaffoldDao;
@Resource
private ScaffoldService scaffoldService;

//分页参数
private Integer page = 1;
private Long totalCount = 0l;
private Long totalPage = 0l;

public Integer getPage() {
return page;
}

public void setPage(Integer page) {
this.page = page;
}

public Long getTotalCount() {
return totalCount;
}

public void setTotalCount(Long totalCount) {
this.totalCount = totalCount;
}

public Long getTotalPage() {
return totalPage;
}

public void setTotalPage(Long totalPage) {
this.totalPage = totalPage;
}

@SuppressWarnings("unchecked")
@ResponseBody
@RequestMapping(value = "/test")
public List<Scaffold> test(String scaffoldId){
Scaffold scaffold = scaffoldService.findScaffoldById(scaffoldId);
String where = "";
//				1 and vo.isStatus in('0','1','2','3') and vo.drafters.id=" + u.getId();
long recordCount = myScaffoldDao.getRecordCount(where,null);// 根据条件查询据库表中数据总数
PageUtil pu = PageUtil.getPage(20, page, recordCount);// 分页
this.setPage(pu.getPage());
this.setTotalPage(pu.getTotalPage());
this.setTotalCount(pu.getTotalCount());
List list = myScaffoldDao.search(where, "vo.scaffold_id desc", null, pu.getStart().intValue(), 20);// 获得20条数据,按生成时间降序排序
return list;
}

@Override
public String getQueryHql() {
// TODO Auto-generated method stub
return null;
}

@Override
public String getQueryCountHql() {
// TODO Auto-generated method stub
return null;
}

}


package com.vams.util.demo;

public class PageUtil {

private Long totalPage;
private Long totalCount;
private Integer page;
private Integer pageSize;
private Long start;

public static PageUtil getPage(Integer pageSize,Integer page, Long totalCount) {
PageUtil pu = new PageUtil();
pu.setPageSize(pageSize);
pu.setTotalCount(totalCount);

Long pageCount = totalCount / pageSize;
if ((totalCount % pageSize) > 0)
pageCount++;
pu.setTotalPage(pageCount);

if (page < 1)
page = 1;
if (page > pageCount)
page = pageCount.intValue();

pu.setPage(page);

Long start = new Long((page - 1) * pageSize);
pu.setStart(start);

return pu;
}

public Long getTotalPage() {
return totalPage;
}

public void setTotalPage(Long totalPage) {
this.totalPage = totalPage;
}

public Long getTotalCount() {
return totalCount;
}

public void setTotalCount(Long totalCount) {
this.totalCount = totalCount;
}

public Integer getPage() {
return page;
}

public void setPage(Integer page) {
this.page = page;
}

public Integer getPageSize() {
return pageSize;
}

public void setPageSize(Integer pageSize) {
this.pageSize = pageSize;
}

public Long getStart() {
return start;
}

public void setStart(Long start) {
this.start = start;
}
}


这一种需要sql拼接

第二种:

package com..vams.util.demo.dao;

import java.util.List;

import org.hibernate.Query;
import org.hibernate.SQLQuery;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.transform.Transformers;
import org.hibernate.type.StandardBasicTypes;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import com.fulongtech.vams.scaffold.entity.Scaffold;
import com.fulongtech.vams.util.demo.entity.PagePO;
import com.fulongtech.vams.util.demo.entity.PreparedSqlAndArgs;

@Component
@SuppressWarnings("rawtypes")
public class MyScaffoldDao1 {

public static final String GET_NOT_ACTIVE_PARENT = " select  * from SCAFFOLD  as s where s.SCAFFOLD_ID=? and s.SCAFFOLD_TYPE=? ";
public static final String GET_NOT_ACTIVE_PARENT_COUNT =  " select count(1) from SCAFFOLD as s where s.SCAFFOLD_ID=?";

@Autowired
private SessionFactory sessionFactory;

protected Session getSession() {
return sessionFactory.getCurrentSession();
}
@SuppressWarnings("unchecked")
public PagePO test(long id, int page, int pageSize) {
final int offset = PagePO.countOffset(pageSize, page);// 当前页开始记录
PreparedSqlAndArgs p = new PreparedSqlAndArgs(GET_NOT_ACTIVE_PARENT, new Object[] { id });
Query query = ((SQLQuery) getSession().createSQLQuery(p.sql).setResultTransformer(Transformers.aliasToBean(Scaffold.class)));
for (int i = 0; i < p.args.length; i++) {
query.setParameter(i, p.args[i]);
}
int allRow = getCount(id);// 总记录数
query.setFirstResult(offset);
if (pageSize >= 0) {
query.setMaxResults(pageSize);
}
List<Scaffold> list = (List<Scaffold>) query.list();
int totalPage = PagePO.countTotalPage(pageSize, allRow);// 总页数
final int currentPage = PagePO.countCurrentPage(page);
PagePO pagePO = new PagePO();
pagePO.setPageSize(pageSize);
pagePO.setCurrentPage(currentPage);
pagePO.setAllRow(allRow);
pagePO.setTotalPage(totalPage);
pagePO.setList(list);
pagePO.init();
return pagePO;
}
public int getCount(long id) {
PreparedSqlAndArgs p = new PreparedSqlAndArgs(GET_NOT_ACTIVE_PARENT_COUNT, new Object[] { id });
Query query = getSession().createSQLQuery(p.sql);
for (int i = 0; i < p.args.length; i++) {
query.setParameter(i, p.args[i]);
}
int allRow = Integer.parseInt(query.uniqueResult().toString());// 总记录数
return allRow;
}
}
package com.vams.util.demo.entity;

import java.util.Arrays;

import org.hibernate.SQLQuery;

public class PreparedSqlAndArgs {
public final String sql;
public final Object[] args;

public PreparedSqlAndArgs(String sql, Object[] args) {
this.sql = sql;
this.args = args;
}

public void appendParams(SQLQuery query){
for (int i = 0; i < args.length; i++) {
query.setParameter(i, args[i]);
}
}

public String toString() {
return "PreparedSqlAndArgs [sql=" + sql + ", args="+ Arrays.toString(args) + "]";
}
}
package com.vams.util.demo.entity;

import java.util.List;
@SuppressWarnings("unused")
public class PagePO<T> {
private List<T> list;// 要返回的某一页的记录列表
private int allRow; // 总记录数
private int totalPage;// 总页数
private int currentPage;// 当前页
private int pageSize;// 每页记录数
private boolean isFirstPage;// 是否为第一页
private boolean isLastPage;// 是否为最后一页
private boolean hasPreviousPage;// 是否有前一页
private boolean hasNextPage;// 是否有下一页

public List<T> getList() {
return list;
}

public void setList(List<T> list) {
this.list = list;
}

public int getAllRow() {
return allRow;
}

public void setAllRow(int allRow) {
this.allRow = allRow;
}

public int getTotalPage() {
return totalPage;
}

public void setTotalPage(int totalPage) {
this.totalPage = totalPage;
}

public int getCurrentPage() {
return currentPage;
}

public void setCurrentPage(int currentPage) {
this.currentPage = currentPage;
}

public int getPageSize() {
return pageSize;
}

public void setPageSize(int pageSize) {
this.pageSize = pageSize;
}

/**
* 初始化分页信息
*/
public void init() {
this.isFirstPage = isFirstPage();
this.isLastPage = isLastPage();
this.hasPreviousPage = isHasPreviousPage();
this.hasNextPage = isHasNextPage();
}

/**
* 以下判断页的信息
* @return
*/

public boolean isFirstPage() {
return currentPage == 1;// 如是当前页是第1页
}

public boolean isLastPage() {
return currentPage == totalPage;// 如果当前页是最后一页
}

public boolean isHasPreviousPage() {
return currentPage != 1;// 只要当前页不是第1页
}

public boolean isHasNextPage() {
return currentPage != totalPage;// 只要当前页不是最后1页
}

/**
* 计算总页数
* @param pageSize  每页记录数
* @param allRow 总记录数
* @return 总页数
*/
public static int countTotalPage(final int pageSize, final int allRow) {
int totalPage = allRow % pageSize == 0 ? allRow / pageSize : allRow / pageSize + 1;
return totalPage;
}

/**
* 计算当前页开始记录
* @param pageSize 每页记录数
* @param currentPage 当前第几页
* @return 当前页开始记录号
*/
public static int countOffset(final int pageSize, final int currentPage) {
final int offset = pageSize * (currentPage - 1);
return offset;
}

/**
* 计算当前页,若为0或者请求的URL中没有"?page=",则用1代替
* @param page 传入的参数
* @return 当前页
*/
public static int countCurrentPage(int page) {
final int curPage = (page == 0 ? 1 : page);
return curPage;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: