仓促把功能进行实现一下  类与类之间也没有进行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. 【 D3.js 入门系列 --- 2 】 怎样使用数据和选择元素

    本人的个人博客首页为: http://www.ourd3js.com/  ,csdn博客首页为:http://blog.csdn.net/lzhlzz/. 转载请注明出处,谢谢. 接着上一讲的内容,这 ...

  2. 详细解读Android中的搜索框(二)—— Search Dialog

    Search Dialog是提供搜索的控件之一,还有一个是上次小例子给出的searchView,关于SearchView的东西后面会说到.本次先从Search Dialog说起,让大家慢慢理解andr ...

  3. Android反编译工具的用法

    Android的APK文件时可以反编译的,通过反编译我们就能查看到大体的代码,帮助学习.反编译仅仅提供的是学习的方式,禁止使用该技术进行非法活动. 其实就是两个命令: 1:运行(WIN+R)-> ...

  4. 《OSPF和IS-IS详解》

    <OSPF和IS-IS详解> 基本信息 作者: (美)Jeff Doyle 译者: 孙余强 出版社:人民邮电出版社 ISBN:9787115347886 上架时间:2014-4-25 出版 ...

  5. java 生成zip文件并导出

    总结一下,关于Java下载zip文件并导出的方法,浏览器导出. String downloadName = "下载文件名称.zip"; downloadName = Browser ...

  6. Spring data jpa Specification查询关于日期的范围搜索

    代码: 时间格式化类型: SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); SimpleDateFormat s ...

  7. [Web 前端] MobX

    1. 介绍 1.1. 原理 React的render是 状态 转化为树状结构的渲染组件的方法 而MobX提供了一种存储,更新 状态 的方法 React 和 MobX都在优化着软件开发中相同的问题. R ...

  8. [Hook] 免root,自己进程内,binder hook (ClipboardManager)

    cp from : http://weishu.me/2016/02/16/understand-plugin-framework-binder-hook/ Android系统通过Binder机制给应 ...

  9. COPY ORCHARD GET 404: System.UnauthorizedAccessException: mappings.bin的访问被拒绝

    COPY ORCHARD 得到 404 错误,结果翻看Logs,得到的错误是: 014-07-31 17:36:46,217 [16] Orchard.Environment.DefaultOrcha ...

  10. Error:Program type already present: android.arch.lifecycle.LiveData

    Apparently, this is intended behavior: com.firebaseui:firebase-ui-firestore:3.1.0 depends on android ...