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
- hibernate分页
- hibernate分页
- hibernate分页
- Hibernate分页
- hibernate分页
- Hibernate分页
- Hibernate 分页
- hibernate 分页
- hibernate分页
- Hibernate 分页
- hibernate分页
- hibernate分页
- hibernate分页
- hibernate--分页
- hibernate分页/
- hibernate分页
- hibernate分页
- hibernate分页
- ActiveMQ Topic发布订阅消息
- 【C/C++】:用C实现输出日期的阴历日子
- Dubbo 管理控制台
- JS之for循环优化
- dubbo -搭建监控中心
- hibernate分页
- 有哪些你觉得能借助学习以自我提升的网站推荐?
- 程序员最应去的网站有哪些?
- Android aidl Binder框架浅析
- Dubbo Main启动方式浅析
- 关于BufferedWrite的close问题
- 持续集成hudson入门
- (c#vs2008)@page命令属性详解
- 大数据架构师:hadoop、Storm该选哪一个