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>&nbsp;&nbsp;   <span>总记录数:<s:property value="totalCount"/>&nbsp;&nbsp;每页显示:<s:property value="pageSize"/></span>&nbsp;&nbsp;   <span>       <s:if test="currPage != 1">           <a href="${pageContext.request.contextPath }/employee_findAll.action?currPage=1">[首页]</a>&nbsp;&nbsp;           <a href="${pageContext.request.contextPath }/employee_findAll.action?currPage=<s:property value="currPage-1"/>">[上一页]</a>&nbsp;&nbsp;       </s:if>       <s:if test="currPage != totalPage">           <a href="${pageContext.request.contextPath }/employee_findAll.action?currPage=<s:property value="currPage+1"/>">[下一页]</a>&nbsp;&nbsp;           <a href="${pageContext.request.contextPath }/employee_findAll.action?currPage=<s:property value="totalPage"/>">[尾页]</a>&nbsp;&nbsp;       </s:if>   </span></td></tr></table></body></html>
0 0
原创粉丝点击