Spring+Structs2+Hibernate简单分页显示
来源:互联网 发布:国内文献数据库 编辑:程序博客网 时间:2024/06/06 17:28
使用的是HIbernate中的findByCriteria()
方法,传入参数中
- begin 从结果集那条数据数开始取 (当前页-1)*pageSize
- pageSize 每页显示
this.getHibernateTemplate().findByCriteria(criteria, begin, pageSize);
点击上一页或下一页,action的路径的currPage相应的减一、加一
http://localhost:8082/TestPageBean/employee_findAll.action?currPage=2
项目结构
Eclipse版本 Neon.1a Release (4.6.1)Spring 4.3.4Structs 2.3.31Hibernate 4.3.11Tomcat 8.0JDK 1.8数据库 MySQL5.7.12
源代码下载(包含jar包):http://download.csdn.net/detail/peng_hong_fu/9697080
实体类
Employee.java
package com.jxust.model;import java.util.Date;/** * 员工的实体类 * @author Peng * @Date2016年11月29日下午2:54:31 */public class Employee { private Integer eid;//员工id private String ename;//员工姓名 private String sex;//员工性别 private Date birthday;//员工生日 private Date joinDate;//入职时间 private String eno;//员工编号 //省略 setter and getter}
查询后返回的结果,就封装在PageBean类的属性
List<T> list
中
PageBean.java
package com.jxust.model;import java.util.List;/** * 分页封装的类 * @author Peng * @Date2016年11月26日下午6:27:15 */public class PageBean<T>{ private int currPage;//当前页数 private int pageSize;//每页显示的记录数 private int totalCount;//总记录数 private int totalPage;//总页数 private List<T> list;//每页的显示的数据 //省略 setter and getter}
实体类和数据表关系映射文件
Employee.hbm.xml
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN""http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"><!-- Generated 2016-9-12 9:12:35 by Hibernate Tools 3.4.0.CR1 --><hibernate-mapping> <class name="com.jxust.model.Employee" table="employee"> <id name="eid" column="eid"> <generator class="native"></generator> </id> <property name="ename" column="ename" length="20" /> <property name="sex" column="sex" length="20" /> <property name="birthday" column="birthday" length="20" /> <property name="joinDate" column="joinDate" length="20" /> <property name="eno" column="eno" length="20" /> </class></hibernate-mapping>
业务层
EmployeeService .java
package com.jxust.service;import com.jxust.model.Employee;import com.jxust.model.PageBean;public interface EmployeeService { PageBean<Employee> findByPage(Integer currPage);}
EmployeeServiceImpl.java
package com.jxust.service.impl;import java.util.List;import org.springframework.transaction.annotation.Transactional;import com.jxust.dao.EmployeeDao;import com.jxust.model.Employee;import com.jxust.model.PageBean;import com.jxust.service.EmployeeService;@Transactionalpublic class EmployeeServiceImpl implements EmployeeService{ private EmployeeDao employeeDao; public void setEmployeeDao(EmployeeDao employeeDao) { this.employeeDao = employeeDao; } @Override public PageBean<Employee> findByPage(Integer currPage) { PageBean<Employee> pageBean = new PageBean<>(); //封装当前页数 pageBean.setCurrPage(currPage); //封装每页显示的记录数 int pageSize =3; pageBean.setPageSize(pageSize); //封装总记录数 int totalCount =employeeDao.findCount(); pageBean.setTotalCount(totalCount); //封装总页数 double tc = totalCount; Double num =Math.ceil(tc/pageSize);//向上取整 pageBean.setTotalPage(num.intValue()); //封装每页显示的数据 int begin =(currPage-1)*pageSize; List<Employee> list = employeeDao.findBypage(begin,pageSize); pageBean.setList(list); return pageBean; }}
Dao层
EmployeeDao.java
package com.jxust.dao;import java.util.List;import com.jxust.model.Employee;public interface EmployeeDao { int findCount(); List<Employee> findBypage(int begin, int pageSize);}
EmployeeDaoImpl.java
package com.jxust.dao.impl;import java.util.List;import org.hibernate.criterion.DetachedCriteria;import org.springframework.orm.hibernate4.support.HibernateDaoSupport;import com.jxust.dao.EmployeeDao;import com.jxust.model.Employee;public class EmployeeDaoImpl extends HibernateDaoSupport implements EmployeeDao { @Override public int findCount() { String hql="select count(*) from Employee"; List<Long> list = (List<Long>) this.getHibernateTemplate().find(hql);//返回的是List<?> if(list.size()>0){ return list.get(0).intValue(); } return 0; } @Override public List<Employee> findBypage(int begin, int pageSize) { DetachedCriteria criteria = DetachedCriteria.forClass(Employee.class); List<Employee> lists = (List<Employee>) this.getHibernateTemplate().findByCriteria(criteria, begin, pageSize); return lists; }}
Action
EmployeeAction.java
package com.jxust.action;import com.jxust.model.Employee;import com.jxust.model.PageBean;import com.jxust.service.EmployeeService;import com.opensymphony.xwork2.ActionContext;import com.opensymphony.xwork2.ActionSupport;public class EmployeeAction extends ActionSupport { private EmployeeService employeeService; public void setEmployeeService(EmployeeService employeeService) { this.employeeService = employeeService; } //当前页数 private Integer currPage =1; public void setCurrPage(Integer currPage) { this.currPage = currPage; } public String findAll(){ PageBean<Employee> pageBean = employeeService.findByPage(currPage); //System.out.println("总记录数:"+pageBean.getTotalCount()); ActionContext.getContext().getValueStack().push(pageBean); return "findSuccess"; }}
配置文件
jdbc.properties
jdbc.driverClass=com.mysql.jdbc.Driverjdbc.url=jdbc:mysql://127.0.0.1:3306/db_testpage?characterEncoding=utf8&useSSL=truejdbc.username=rootjdbc.password=root
需要建好一个数据库 比如我建的 db_testpage
log4j.properties
log4j.rootLogger=DEBUG,Consolelog4j.appender.Console=org.apache.log4j.ConsoleAppenderlog4j.appender.Console.layout=org.apache.log4j.PatternLayoutlog4j.appender.Console.layout.ConversionPattern=%d [%t] %-5p [%c] - %m%nlog4j.logger.org.apache=INFOlog4j.logger.java.sql.ResultSet=INFOlog4j.logger.java.sql.PreparedStatement=DEBUGlog4j.logger.java.sql.Statement=DEBUGlog4j.logger.java.sql.Connection=DEBUG
web.xml
<?xml version="1.0" encoding="UTF-8"?><web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1"> <display-name>TestPageBean</display-name> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> <context-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:applicationContext.xml</param-value> </context-param> <filter> <filter-name>struts2</filter-name> <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class> </filter> <filter-mapping> <filter-name>struts2</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list></web-app>
applicationContext.xml
<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:context="http://www.springframework.org/schema/context" xmlns:tx="http://www.springframework.org/schema/tx" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.3.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.3.xsd "> <!-- 引入外部的属性文件 --> <context:property-placeholder location="classpath:jdbc.properties"/> <!-- 配置c3p0 连接池 --> <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"> <property name="driverClass" value="${jdbc.driverClass}"/> <property name="jdbcUrl" value="${jdbc.url}"/> <property name="user" value="${jdbc.username}"/> <property name="password" value="${jdbc.password}"/> </bean> <!-- 配置hibernate 相关属性--> <bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean"> <!-- 注入连接池--> <property name="dataSource" ref="dataSource"></property> <!-- hibernate 的相关属性 --> <property name="hibernateProperties" > <props> <prop key="hibernate.show_sql">true</prop> <prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop> <prop key="hibernate.format_sql">true </prop> <!-- 它包含4个属性: * create : 会根据你的model类来生成表,但是每次运行都会删除上一次的表,重新生成表,哪怕2次没有任何改变 * create-drop : 根据model类生成表,但是sessionFactory一关闭,表就自动删除 * update : 最常用的属性,也根据model类生成表,即使表结构改变了,表中的行仍然存在,不会删除以前的行 * validate : 只会和数据库中的表进行比较,不会创建新表,但是会插入新值 --> <prop key="hibernate.hbm2ddl.auto">update</prop> </props> </property> <!-- hibernate 映射文件 --> <property name="mappingResources"> <list> <value>/com/jxust/model/Employee.hbm.xml</value> </list> </property> </bean> <!-- 配置事务管理器 --> <bean id="transactionManager" class="org.springframework.orm.hibernate4.HibernateTransactionManager"> <property name="sessionFactory" ref="sessionFactory"></property> </bean> <!-- 开启事务注解 --> <tx:annotation-driven transaction-manager="transactionManager" /> <!-- 配置Action 的类 action由spring管理--> <bean id="employeeActionBean" class="com.jxust.action.EmployeeAction"> <property name="employeeService" ref="employeeServiceBean"></property> </bean> <!-- 配置业务层的类 --> <bean id="employeeServiceBean" class="com.jxust.service.impl.EmployeeServiceImpl"> <property name="employeeDao" ref="employeeDaoBean"></property> </bean> <!-- 配置dao层的类 --> <bean id="employeeDaoBean" class="com.jxust.dao.impl.EmployeeDaoImpl"> <property name="sessionFactory" ref="sessionFactory"></property> </bean></beans>
struts.xml
<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN" "http://struts.apache.org/dtds/struts-2.3.dtd"><struts> <package name="default" namespace="/" extends="struts-default"> <!-- class="employeeActionBean"为Action在spring配置文件中 bean的id --> <action name="employee_*" method="{1}" class="employeeActionBean"> <result name="findSuccess">/WEB-INF/listPage.jsp</result> </action> </package></struts>
jsp页面
index.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%><% String path = request.getContextPath(); String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + path + "/";%><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>Insert title here</title></head><body> <a href="<%=basePath%>employee_findAll.action">测试分页</a></body></html>
利用OGNL表达式取值栈中的数据
listPage.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib uri="/struts-tags" prefix="s" %><%String path = request.getContextPath();String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";%><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>分页</title><style type="text/css"> .table1{ border:1px solid #ddd; width:900px; } thead{ background-color:lightblue; } </style></head><body><table cellspacing="0" border="1" class="table1"><thead> <tr><td align="center">编号</td><td align="center">员工姓名</td><td align="center">性别</td><td align="center">出生日期</td><td align="center">入职时间</td></tr></thead><tbody><s:iterator value="list" var="e"> <tr> <td align="center"><s:property value="#e.eno"/></td> <td align="center"><s:property value="#e.ename"/></td> <td align="center"><s:property value="#e.sex"/></td> <td align="center"><s:date name="#e.birthday" format="yyyy-MM-dd"/></td> <td align="center"><s:date name="#e.joinDate" format="yyyy-MM-dd"/></td> </tr></s:iterator></tbody></table><table table border="0" cellspacing="0" cellpadding="0" width="900px"><tr><td align="right"> <span>第<s:property value="currPage"/>/<s:property value="totalPage"/>页</span> <span>总记录数:<s:property value="totalCount"/> 每页显示:<s:property value="pageSize"/></span> <span> <s:if test="currPage != 1"> <a href="${pageContext.request.contextPath }/employee_findAll.action?currPage=1">[首页]</a> <a href="${pageContext.request.contextPath }/employee_findAll.action?currPage=<s:property value="currPage-1"/>">[上一页]</a> </s:if> <s:if test="currPage != totalPage"> <a href="${pageContext.request.contextPath }/employee_findAll.action?currPage=<s:property value="currPage+1"/>">[下一页]</a> <a href="${pageContext.request.contextPath }/employee_findAll.action?currPage=<s:property value="totalPage"/>">[尾页]</a> </s:if> </span></td></tr></table></body></html>
0 0
- Spring+Structs2+Hibernate简单分页显示
- Spring+Structs2+Hibernate实例
- struts2+spring+hibernate分页显示
- spring,structs2,hibernate 整合 xml版
- hibernate+spring的一个简单分页实现
- hibernate+spring的一个简单分页实现
- hibernate+spring的一个简单分页实现
- hibernate+spring的一个简单分页实现
- Hibernate+Spring+Struts2整合开发中的一个分页显示方案
- Hibernate+Spring+Struts2整合开发中的一个分页显示方案
- Hibernate+Spring+Struts2整合开发中的一个分页显示方案
- 关于Spring+Hibernate+Ajax+jQuery中的分页显示处理
- Hibernate+Spring+Struts2整合开发中的一个分页显示方案
- Hibernate+Spring+Struts2整合开发中的一个分页显示方案
- Spring+Hibernate+Struts2项目 分页显示算法实现
- Hibernate+Spring+Servlet整合开发中的分页显示方案
- JavaEE网上商城项目(涉及Structs2+Spring+Hibernate+jQuery)
- JavaEE网上商城项目(涉及Structs2+Spring+Hibernate+jQuery)
- 查看统计信息脚本
- 斐波那契数列
- 欢迎使用CSDN-markdown编辑器
- WebPack安装-使用-Loader-配置-插件-环境-排错详解(中)
- google开源他的聊天机器人代码
- Spring+Structs2+Hibernate简单分页显示
- ubuntu下安装MongoDB
- 关于IOS APP STORE IPV6 模拟环境
- Kafka动态增加Topic的副本(Replication)
- 用sublime text3 编译less并且转换成css
- QT设置鼠标指针位置
- Java集合学习中需要注意的一个点
- Java中的输入输出总结
- ButterKnife 8.4.0 @BindView 失败,nullpointerexception