hibernate分页

来源:互联网 发布:中兴沈阳大数据研究院 编辑:程序博客网 时间:2024/04/29 11:11

第一种:

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[n]);}}if (start >= 0) {query.setFirstResult(start);}if (size > 0) {query.setMaxResults(size);}List list = query.list();return list;}});return list;}// 加条件查询所有对象,返回集合listpublic 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[n]);}}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();// 统计总数据的sqlpublic 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{@Overridepublic String getQueryHql() {return "from main.java.com.fulongtech.vams.scaffold.entity.Scaffold as vo where 1=1";}@Overridepublic 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{@Resourceprivate MyScaffoldDao myScaffoldDao;@Resourceprivate 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;}@Overridepublic String getQueryHql() {// TODO Auto-generated method stubreturn null;}@Overridepublic String getQueryCountHql() {// TODO Auto-generated method stubreturn 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=?";@Autowiredprivate 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;}}




0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 cpu和主板不兼容怎么办 主板与cpu不兼容怎么办 cpu跟主板不兼容怎么办 软件与电脑不兼容怎么办 win8系统无限重启怎么办 安装微信旧版本登录提示升级怎么办 手机软件与系统不兼容怎么办 下载旧版本微信闪退登陆不了怎么办 企业微信一直登录失败怎么办 360浏览器9.1经常卡死怎么办 手机版爱奇艺看电影屏幕变小怎么办 找不到旧版本米聊怎么办 苹果id被锁了怎么办 新浪微博支付宝解绑失败怎么办 阿里妈妈升级看不到引流人数怎么办 阿里妈妈账号被冻结怎么办 微博昵称到次数怎么办 五星好评之后忘记截图了怎么办 评价后忘了截图怎么办 好评率太低不能买东西了怎么办 淘宝评价被删了怎么办 淘宝店铺有流量没有成交怎么办 淘宝好评被删了怎么办 淘宝评论被系统删除怎么办 淘宝被商家删除评价怎么办 淘宝评价管理商家删除了怎么办 淘宝商家删除评价我该怎么办 我的评价隐藏了怎么办 淘宝把评论删了怎么办 淘宝虚假交易被删除评价怎么办 淘宝好评评错了怎么办 被淘宝骗了好评怎么办 美团好评被删了怎么办 卖家收到好评内容是差评怎么办 淘宝收货电话写错了怎么办 淘宝评价写错了怎么办 饿了么商家差评怎么办 淘宝不给补差价怎么办 淘宝顾客给差评怎么办 淘宝买家账号体检违规怎么办 买家淘宝账户体检中心违规怎么办