仓促把功能进行实现一下  类与类之间也没有进行MVC式分开  重要的是逻辑 记录一下 希望其中的些许代码逻辑对你有用

TUserDaoImpl---dao层的实现
package com.pers.hoobey; import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.Transaction; import java.util.List; /**
* Created by hoobey on 2017/9/7.
*/
public class TUserDaoImpl implements TUserDao {
@Override
public TUser busOper(TUser bean, int oper) {
Session s = HibernateSessionFactory.getSession();
Transaction tx = s.getTransaction();
TUser user = new TUser();
try {
tx.begin();
user = bean;
//evict变为脱管状态,脱管对象通过session的save,update,saveOrUpdate,lock等方法变回持久化对象
s.evict(bean);
if (oper == -) {
s.delete(bean);
} else if (oper == ) {
s.update(bean);
} else if (oper == ) {
s.save(bean);
} else {
user = (TUser) s.get(TUser.class, bean.getId());
}
tx.commit();
} catch (Exception ex) {
ex.printStackTrace();
tx.rollback();//事务回滚
return null;
}
s.evict(bean);
s.close();
return user;
} /**
* 使用hibernate提供的分页功能,得到分页显示的数据
* select * from t_user limit 0,3;
* 0=offset
* 3=pageSize
*/
@SuppressWarnings("unchecked")
@Override
public List<TUser> queryByPage(String hql, int offset, int pageSize) {
Session session = HibernateSessionFactory.getSession();
Transaction tx = null;
List<TUser> list = null; try {
tx = session.beginTransaction(); Query query = session.createQuery(hql).setFirstResult(offset).setMaxResults(pageSize); list = query.list(); tx.commit(); } catch (Exception e) {
if (tx != null) {
tx.rollback();
}
e.printStackTrace();
} finally {
HibernateSessionFactory.closeSession();
}
return list;
} /**
* 通过hql语句得到数据库中记录总数
*/
@Override
public int getAllRowCount(String hql) {
Session session = HibernateSessionFactory.getSession();
Transaction tx = null;
int allRows = ;
try {
tx = session.beginTransaction(); Query query = session.createQuery(hql); allRows = query.list().size(); tx.commit(); } catch (Exception e) {
if (tx != null) {
tx.rollback();
} e.printStackTrace();
} finally {
HibernateSessionFactory.closeSession();
} return allRows;
}
}
.PageBean--每一页显示的信息内容
package com.pers.hoobey;
import java.util.List;
/**
* Created by hoobey on 2017/9/7.
* (每一页所需要的内容都存放在这个PageBean里面),里面用来存放网页每一页显示的内容
*/
public class PageBean {
private List<TUser> list; //通过hql从数据库分页查询出来的list集合 private int allRows; //总记录数 private int totalPage; //总页数 private int currentPage; //当前页
/**
* 得到总页数
*
* @param pageSize 每页记录数
* @param allRows 总记录数
* @return 总页数
*/
public int getTotalPages(int pageSize, int allRows) {
int totalPage = (allRows % pageSize == ) ? (allRows / pageSize) : (allRows / pageSize) + ; return totalPage;
} /**
* 得到当前开始记录号
*
* @param pageSize 每页记录数
* @param currentPage 当前页
* @return
*/
public int getCurrentPageOffset(int pageSize, int currentPage) {
int offset = pageSize * (currentPage - ); return offset;
} /**
* 得到当前页, 如果为0 则开始第一页,否则为当前页
*
* @param page
* @return
*/
public int getCurPage(int page) {
int currentPage = (page == ) ? : page; return currentPage;
} public List<TUser> getList() {
return list;
} public void setList(List<TUser> list) {
this.list = list;
} public int getAllRows() {
return allRows;
} public void setAllRows(int allRows) {
this.allRows = allRows;
} 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;
} }
.TUserServiceImpl---service层实现
package com.pers.hoobey; import java.util.Iterator;
import java.util.List; /**
* Created by hoobey on 2017/9/7.
*/
public class TUserServiceImpl implements TUserService {
private TUserDaoImpl tUserDaoImpl = new TUserDaoImpl(); /**
* pageSize为每页显示的记录数
* page为当前显示的页数 从0开始
*/
@Override
public PageBean getPageBean(int pageSize, int page) {
PageBean pageBean = new PageBean(); String hql = "from TUser limit "; int allRows = tUserDaoImpl.getAllRowCount(hql);//总记录数 int totalPage = pageBean.getTotalPages(pageSize, allRows);//总页数 int currentPage = pageBean.getCurPage(page);//当前页 int offset = pageBean.getCurrentPageOffset(pageSize, currentPage);//当前页是 从1开始 要减去1 默认从0开始

//此处就隐含了分页查询 比对 select * from user limit "+(pageNo-1)*pageSize+","+pageSize;
List<TUser> list = tUserDaoImpl.queryByPage(hql, offset, pageSize);
/*打印输出看一波 非常正确 所有的数据都存进了pageBean*/
Iterator<TUser> iterator = list.iterator();
while(iterator.hasNext()){
System.out.println("查询当前分页显示的数据是:"+iterator.next().toString());
}
System.out.println("总记录数:"+allRows);
System.out.println("当前页面是:"+currentPage);
System.out.println("总页数是:"+totalPage); pageBean.setList(list);
pageBean.setAllRows(allRows);
pageBean.setCurrentPage(currentPage);
pageBean.setTotalPage(totalPage); return pageBean;
}
}
.TUserAction--action的定义
package com.pers.hoobey; import com.opensymphony.xwork2.ActionSupport;
import org.apache.struts2.ServletActionContext;
import org.hibernate.Criteria;
import org.hibernate.Session; import javax.servlet.http.HttpServletRequest;
import java.util.List; public class TUserAction extends ActionSupport {
private static final long serialVersionUID = 1L;
private TUser user;
private List<TUser> dataobject;//保存所有TUser数据集合 TUserDaoImpl tUserDaoImpl = new TUserDaoImpl(); TUserServiceImpl tUserServiceImpl = new TUserServiceImpl();
private int page;
//查询所有
public String execute() throws Exception {
Session session = HibernateSessionFactory.getSession();
Criteria query = session.createCriteria(TUser.class);
this.dataobject = (List<TUser>)query.list();
for(TUser user : dataobject){
System.out.println("id="+user.getId()+"name="+user.getName());
}
session.close();
return SUCCESS;
}
// 增加数据
public String addLine() throws Exception {
System.out.print(user.getName());// user里面有内容
user = tUserDaoImpl.busOper(user, );
if (user == null)
return ERROR;
return SUCCESS;
}
//修改数据
public String updLine() throws Exception{
user= tUserDaoImpl.busOper(user, );
if(user==null) return ERROR;
return SUCCESS;
}
//删除数据
public String delLine() throws Exception{
user= tUserDaoImpl.busOper(user, -);//设计的很巧妙
if(user==null) return ERROR;
return SUCCESS;
}
//当前页数显示数据
public String PageAll() throws Exception{
//表示每页显示3条记录,page表示当前网页
System.out.println("点击首页链接,进来了,返回出pageBean对象");
PageBean pageBean = tUserServiceImpl.getPageBean(, page);
System.out.println(page); HttpServletRequest request = ServletActionContext.getRequest(); request.setAttribute("pageBean", pageBean);//通过struts.xml的配置把pageBean值送到jsps/Alldata.jsp return SUCCESS;
} public TUser getUser() {
return user;
} public void setUser(TUser user) {
this.user = user;
}
public List<TUser> getDataobject() {
return dataobject;
} public void setDataobject(List<TUser> dataobject) {
this.dataobject = dataobject;
} public int getPage() {return page;} public void setPage(int page) {this.page = page;}
}
.Alldata.jsp--页面信息显示
<%@ page language="java" import="java.util.*,com.pers.hoobey.*" pageEncoding="utf-8"%>
<%@ taglib uri="/struts-tags" prefix="s"%>
<%
TUser user = new TUser();
%>
<!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">
<script type="text/javascript"> function validate() {
var page = document.getElementsByName("page")[].value; if (page > <s:property value="#request.pageBean.totalPage"/>) {
alert("你输入的页数大于最大页数,页面将跳转到首页!"); window.document.location.href = "TUserAction"; return false;
} return true;
} </script>
</head>
<body>
HQL 查询结果显示如下:
<h1><font color="blue">分页查询</font></h1>
<hr>
<br>
<table align="center">
<tr>
<td>序号</td>
<td>姓名</td>
<td>操作1</td>
<td>操作2</td>
</tr>
<%--#request.pageBean.list 数据从TUserServiceImpl获取存入到PageBean--%>
<s:iterator value="#request.pageBean.list" id="tUser">
<tr>
<td><s:property value="#tUser.id" /></td>
<td><s:property value="#tUser.name" /></td>
<!-- 修改不同id对应的数据 -->
<td><a href="<%=request.getContextPath() %>/edit.jsp?user.id=<s:property value="#tUser.id" />">修改</a></td>
<td><a href="delline.action?user.id=<s:property value="#tUser.id" />">删除</a></td>
</tr>
</s:iterator>
</table>
<%--进行分页的页面布局--%> <center> <font size="">共<font color="red"><s:property value="#request.pageBean.totalPage" /></font>页 </font>&nbsp;&nbsp;
<font size="">共<font color="red"><s:property value="#request.pageBean.allRows" /></font>条记录</font><br><br> <s:if test="#request.pageBean.currentPage == 1">
首页&nbsp;&nbsp;&nbsp;上一页
</s:if> <s:else>
<%--进入此展示页面 必须点击首页链接 才会触动action去执行逻辑函数--%>
<a href="TUserAction.action">首页</a>
&nbsp;&nbsp;&nbsp;
<a href="TUserAction.action?page=<s:property value="#request.pageBean.currentPage - "/>">上一页</a>
</s:else> <s:if test="#request.pageBean.currentPage != #request.pageBean.totalPage">
<a href="TUserAction.action?page=<s:property value="#request.pageBean.currentPage + "/>">下一页</a>
&nbsp;&nbsp;&nbsp;
<a href="TUserAction.action?page=<s:property value="#request.pageBean.totalPage"/>">尾页</a>
</s:if> <s:else>
下一页&nbsp;&nbsp;&nbsp;尾页
</s:else> </center>
<br> <center> <form action="TUserAction" onsubmit="return validate();">
<font size="">跳转至</font>
<input type="text" size="" name="page">页
<input type="submit" value="跳转">
</form> </center>
</body>
</html>

hibernate和struts实现分页的更多相关文章

  1. hibernate和struts2实现分页功能

    1.DAO层接口的设计,定义一个PersonDAO接口,里面声明了两个方法: public interface PersonDAO { public List<Person> queryB ...

  2. hibernate与struts框架实现增删改查

    这里配置hibernate与struts不再过多赘述,配置搭建前文已经详细讲解,配置如下: hibernate.hbm.xml配置: <?xml version="1.0" ...

  3. 解决hibernate对Sql Server分页慢的问题

    一.hibernate分页 hibernate对MsSql的伪分页 分页是web项目中比不可少的一个功能,数据量大的时候不能全部展示必然要用到分页技术.相信大家对hibernate中的分页都不陌生: ...

  4. 关于使用MyEclipse自动生成Hibernate和Struts出现的jar不兼容的问题(antlr.collections.AST.getLine()I)

    今天做Hibernate和Struts2结合的练习,使用MyEclipse自动创建Hibernate和Struts的相关配置文件和jar包,写完一个查询方法后,准备测试一下结果,简单的查询那种,很诡异 ...

  5. Hibernate和Struts分页查询

    分页查询数据库方法 /** * 分页查询方法 * @param sql,pageNO,maxResult * @return List */ public List<Object> que ...

  6. Struts+Hibernate+jsp页面 实现分页

    dao层数据库代码: package com.hanqi.dao; import java.util.ArrayList; import java.util.List; import org.hibe ...

  7. Hibernate+jsp+struts+spring做增删该查,

    同样还是web项目,这里只做了一张表,做一个测试,例子.主要是建Hibernate 的时候要非常注意,有时间了整理一下建Hiberbnate 的时候需要注意的事项 这里我是建了5个包,其实只要四个就好 ...

  8. 【Spring实战-3】Spring整合Hibernate、Struts

    作者:ssslinppp      1. 摘要 版本: Spring4.0.4:Hibernate4.3.5:struts2.3.16: 主要介绍了如下内容: 项目结构的规划: Spring下整合Hi ...

  9. hibernate、struts、spring mvc的作用

    Hibernate工作原理及为什么要用?原理:1.读取并解析配置文件2.读取并解析映射信息,创建SessionFactory3.打开Sesssion4.创建事务Transation5.持久化操作6.提 ...

随机推荐

  1. Quartz 2.3.0 升级感受

    Quartz 2.3.0 发布,Quartz是一个开源的作业调度框架,它完全由Java写成,并设计用于J2SE和J2EE应用中.它提供了巨大的灵 活性而不牺牲简单性.你能够用它来为执行一个作业而创建简 ...

  2. go 删除数组元素

    golang中对一个slice进行“slice”可以取片段得到一个新的slice,那么如何用简洁的代码删除slice中的一个元素呢? a := []int{0, 1, 2, 3, 4} //删除第i个 ...

  3. 关于websocket集群中不同服务器的用户间通讯问题

    最近将应用部署到集群时遇到一个问题,即用户命中不同的服务器导致的用户间无法进行websocket通讯,在网上搜索到类似问题但都没有具体解决方案. 于是用redis的订阅发布功能解决了该问题,具体流程如 ...

  4. ios之两个view传值

    delegate:demo使用场景,我有A,B两个controller,A是root,跳转到B,B的数据输入完返回A且携带数据显示到A. A.h #import <UIKit/UIKit.h&g ...

  5. Android工具类 DateUtil,可以用它方便的进行日期的操作

    本文转载自:http://blog.csdn.net/xuduzhoud/article/details/27526177 全部代码如下: DateUtil.java package com.exam ...

  6. 利用Logstash插件进行Elasticsearch与Mysql的数据

    Logstash与Elasticsearch的安装就不多说了,我之前有两篇文章写的比较详细了ElasticSearch + Logstash + Kibana 搭建笔记 和 Filebeat+Logs ...

  7. IE8 MIME type application/json not found

    如果: public ContentResult GetPaper(string testId) {     return ControllProctector.Do1(() =>        ...

  8. Java Callable和Future简述

    创建线程的两种方式,一种是直接继承Thread,另外一种就是实现Runnable接口.这两种方式都有一个缺陷就是:在执行完任务之后无法获取执行结果.如果需要获取执行结果,就必须通过共享变量或者使用线程 ...

  9. CSS 强制换行和禁止换行强制换行 和禁止换行样式

    强制换行 1.word-break: break-all;       只对英文起作用,以字母作为换行依据. 2.word-wrap: break-word;   只对英文起作用,以单词作为换行依据. ...

  10. 解决:CentOS下的 error while loading shared libraries: libmysqlclient.so.16: cannot open shared object file: No such file or dir

    进入别人的centos,输入命令 mysql mysqladm都会报错,缺少这个共享库 libmysqlclient.so.16 . 查找下,一般都是ldconfig 没有找到共享库的位置,或者 软链 ...