/**分页包装类
很简单 :)
*/
package com.xing.cms.model.util;
public class Pager {
private int totalPages = 0;
private int totalObjects = 0;
private int pageNumber = 1;
private int pageSize = 3;
private boolean pageAble = true;
private int firstResult;
public void calc(){
totalPages = totalObjects % pageSize == 0 ? totalObjects
/ pageSize : totalObjects / pageSize + 1;
firstResult = (pageNumber - 1) * pageSize;
}
public boolean isPageAble() {
return pageAble;
}
public void setPageAble(boolean pageAble) {
this.pageAble = pageAble;
}
public int getTotalObjects() {
return totalObjects;
}
public void setTotalObjects(int param) {
this.totalObjects = param;
}
public int getTotalPages() {
return totalPages;
}
public void setTotalPages(int param) {
this.totalPages = param;
}
public int getPageNumber() {
return pageNumber;
}
public void setPageNumber(int pageNumber) {
this.pageNumber = pageNumber;
}
public int getPageSize() {
return pageSize;
}
public void setPageSize(int pageSize) {
this.pageSize = pageSize;
}
public String toString(){
return("\ntotalPages:" + totalPages +
"\ntotalObjects:" + totalObjects +
"\npageNumber:" + pageNumber +
"\npageSize:" + pageSize +
"\npageAble:" + pageAble +
"\nfirstResult:" + firstResult);
}
public int getFirstResult() {
return firstResult;
}
public void setFirstResult(int firstResult) {
this.firstResult = firstResult;
}
}
/*UserDao 接口*/
package com.xing.cms.model.dao;
import java.util.List;
import com.xing.cms.model.businessobject.User;
import com.xing.cms.model.util.Pager;
public interface UserDao {
public abstract boolean save(User model);
public abstract boolean update(User model);
public abstract User get(int id);
public abstract boolean delete(int id);
public abstract void truncate();
public abstract boolean delete(int[] id);
public abstract List<User> find(String[][] searchPara,Pager pager);
public abstract List<User> find(String[][] searchPara);
}
/*UserDao实现*/
package com.xing.cms.model.dao.impl;
import java.sql.SQLException;
import java.util.List;
import org.hibernate.Criteria;
import org.hibernate.Hibernate;
import org.hibernate.HibernateException;
import org.hibernate.Query;
import org.hibernate.Session;
//import org.hibernate.criterion.Expression;
import org.hibernate.criterion.Restrictions;
import org.hibernate.criterion.MatchMode;
import org.hibernate.criterion.Order;
import org.hibernate.criterion.Projections;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.orm.hibernate3.HibernateCallback;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
import com.xing.cms.model.businessobject.User;
import com.xing.cms.model.dao.UserDao;
import com.xing.cms.model.util.GeneralTool;
import com.xing.cms.model.util.Pager;
public class UserDaoImpl extends HibernateDaoSupport implements UserDao {
private JdbcTemplate jdbcTemplate;// Spring Injection
public UserDaoImpl() {
super();
}
public JdbcTemplate getJdbcTemplate() {
return jdbcTemplate;
}
public void setJdbcTemplate(JdbcTemplate param) {
this.jdbcTemplate = param;
}
@SuppressWarnings("unchecked")
public List<User> find(final String[][] searchPara, final Pager pager) {
return (List<User>) this.getHibernateTemplate().execute(
new HibernateCallback() {
public Object doInHibernate(Session session)
throws SQLException, HibernateException {
Criteria ca_count = null;
if(pager.isPageAble())
ca_count = session.createCriteria(User.class);//不能避免,需要查询两次数据库,这个获取总数
Criteria ca = session.createCriteria(User.class);
if(searchPara != null){
ca.setProjection(null);
for (int i = 0; i < searchPara.length; i++) {
if (searchPara[i][1].equalsIgnoreCase("=")) {
if(pager.isPageAble())
ca_count.add(Restrictions.eq(searchPara[i][0], searchPara[i][2]));
ca.add(Restrictions.eq(searchPara[i][0], searchPara[i][2]));
} else if (searchPara[i][1].equalsIgnoreCase("like")) {
if(pager.isPageAble())
ca_count.add(Restrictions.like(searchPara[i][0], searchPara[i][2],MatchMode.ANYWHERE));
ca.add(Restrictions.like(searchPara[i][0], searchPara[i][2],MatchMode.ANYWHERE));
}
}
}
List ret_list;
if (pager.isPageAble()) {
pager.setTotalObjects(((Integer) (ca_count
.setProjection(Projections.rowCount())
.uniqueResult())).intValue()); //获取Count
pager.calc();
ca.addOrder(Order.desc("UID"));
ca.setFirstResult(pager.getFirstResult());
ca.setMaxResults(pager.getPageSize());
ret_list = ca.list();
} else {
ca.addOrder(Order.desc("UID"));
ret_list = ca.list();
}
return ret_list;
}
});
}
// ......其它方法略去
/*测试类*/
package test;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.test.AbstractTransactionalDataSourceSpringContextTests;
import com.xing.cms.model.businessobject.User;
import com.xing.cms.model.dao.DocumentDao;
import com.xing.cms.model.dao.UserDao;
import com.xing.cms.model.util.HtmlGenerator;
import com.xing.cms.model.util.Pager;
import com.xing.cms.model.util.UtilXml;
import com.xing.cms.action.UserAction;
public class TestSpring extends AbstractTransactionalDataSourceSpringContextTests
{
private Log logger = LogFactory.getLog(TestSpring.class);
public String[] getConfigLocations() {
String[] config = new String[]{"applicationContext.xml"};
return config;
}
public void testUserAction() throws Exception{
UserDao dao = (UserDao)applicationContext.getBean("userDao");
assertTrue(dao!=null);
User user = (User)applicationContext.getBean("user");
assertTrue(user!=null);
Pager pager = (Pager)applicationContext.getBean("pager");
assertTrue(pager!=null);
UserAction action = (UserAction)applicationContext.getBean("userAction");
assertTrue(action!=null);
//clear all first
dao.truncate();
//super.setComplete();
//add
for(int i=0;i<20;i++)
{
User u = new User();
u.setGID(1);
u.setUsername("xzw_"+i);
u.setPassword("abcd");
dao.save(u);
}
//no pager
/*
assertEquals(0,dao.find(
new String[][]{
new String[]{"username","=","xzw"}
}
).size());
assertEquals(20,dao.find(null).size());
*/
//with pager
//action.getPager().setPageSize(9);
//10 11 12 ... 19 + 1 = 11
/*分页,取第一页,前4 条,应该返回4*/
action.getPager().setPageSize(4);
assertEquals(4,dao.find(new String[][]{
new String[]{"username","like","xzw_1"}
},action.getPager()).size());
/*不分页,则取全部的,应该返回20*/
action.getPager().setPageAble(false);
action.getPager().setPageSize(4);
assertEquals(11,dao.find(new String[][]{
new String[]{"username","like","xzw_1"}
},action.getPager()).size());
}
}
分享到:
相关推荐
在这个项目中,“spring+struts2+hibernate整合实现分页”是一个基础教程,旨在帮助初学者理解如何在SSH框架下实现数据的分页展示。下面将详细讲解这个主题中的关键知识点。 1. **Spring框架**:Spring是Java应用的...
本主题将深入探讨如何使用JavaServer Faces (JSF)、Spring框架和Hibernate ORM工具来实现SQL Server数据库中的数据分页显示。 **JavaServer Faces (JSF)** JSF是一个Java标准,用于构建企业级的Web应用程序。它提供...
### Struts2 + Spring2 + Hibernate3 经典分页技术解析 #### 一、概述 在企业级应用开发中,分页显示是常见的需求之一。对于数据量较大的查询结果,采用分页的方式不仅能减轻服务器的压力,提高用户体验,还能更好...
本项目是一个基于SpringMVC、Spring、Hibernate和jQuery的完整分页应用,涵盖了后端服务、数据持久化、前端交互等多个重要技术领域。下面将详细解释这些技术及其在项目中的应用。 1. SpringMVC:SpringMVC是Spring...
在这个类中,我们可以通过编写Hibernate HQL或SQL查询语句来实现分页查询。 4. **Struts2 Action** 在Action类中,我们需要处理来自用户的请求参数,如当前页码和每页显示记录数等,并调用DAO中的分页查询方法获取...
struts2+spring+hibernate分页显示 分页显示一直是web开发中一大烦琐的难题,传统的网页设计只在一个JSP或者ASP页面中书写所有关于数据库操作的代码,那样做分页可能简单一点,但当把网站分层开发后,分页就比较困难...
总的来说,Struts+Spring+Hibernate 分页涉及到前端交互、后端服务、数据库查询等多个环节,需要综合运用这三个框架的能力。理解并熟练掌握这一过程,对于开发高效、可维护的Web应用具有重要意义。
在这个场景中,"JSF+Spring+Hibernate配置以及分页查询和Excel文件导出"是一个典型的企业级应用开发组合。下面将详细阐述这些技术及其整合方式。 1. JavaServer Faces (JSF): JSF是一种Java标准的MVC(模型-视图-...
### WebWork 2.2.7 + Spring + Hibernate 分页查询技术详解 #### 一、项目背景及架构 本项目采用WebWork 2.2.7框架结合Spring和Hibernate技术实现了一个基本的用户数据分页查询功能。主要目标是根据用户输入的...
这个"高效率的dw+spring+hibernate分页演示例子"提供了一个实用的示例,展示了如何将这三个框架整合起来,以实现高效的数据分页功能。 首先,让我们来逐一了解这三个技术: 1. **DWR (Direct Web Remoting)**:DWR...
总的来说,结合Spring、Hibernate和MySQL的分页功能,不仅可以有效地管理大量数据,提高查询效率,还能提供良好的用户体验,是Web应用开发中的常见实践。在实际项目中,应根据具体需求调整分页策略,如缓存优化、...
struts+spring+hibernate通用分页方法.rar 博文链接:https://igogogo9.iteye.com/blog/97692
在这个特定的项目中,"spring+hibernate+c标签分页+mysql"组合,意味着开发者利用Spring作为整体架构,通过Hibernate进行数据持久化,同时使用了JSP中的C标签(JSTL Core Library)来实现前端页面的分页功能,并将...
**Hibernate分页查询** Hibernate支持两种分页方式:Criteria API和HQL(Hibernate Query Language)。Criteria API可以通过DetachedCriteria对象创建查询条件,然后调用setFirstResult和setMaxResults方法实现分页...
"Struts+Spring+Hibernate通用分页解决方案"是针对基于这三大框架(Struts、Spring、Hibernate)的Java Web应用所设计的一种高效且可复用的分页策略。以下是关于这个主题的详细解释: 1. **Struts框架**:Struts是...
"使用Struts + Spring + Hibernate完成分页笔记"这个主题涵盖了三个关键的Java EE框架:Struts、Spring和Hibernate,它们分别负责表现层、业务逻辑层和数据访问层的管理。下面将详细介绍这三个框架在分页实现中的...
struts2+spring+hibernate3的简易图书管理系统,特别适合初学者集成! 实现了简单的分页和模糊查询。(基本上涵盖了开发ssh2的包),值得拥有哦! 注:数据库sql文件(mysql 5.5)在里面,要自己配好!
系统搭建使用struts2 + spring + hibernate + easyui 整合的, 功能包括: 分页查询,自定义页面数据显示量,用户名模糊搜索,创建时间段,更新时间段内用户信息搜索,双击行进行编辑,多行选中删除,右键菜单已经写好...
4.在服务端分页查询功能,优点:实时性:跳页才查询。数据量小:只加载当前页的记录进行显示。 5.单数据源配置(兼容Tomcat和Weblogic)。 6.Hibernate继承 HibernateDaoSupport。 7.Spring+Junit4单元测试,优点:...