hibernate和struts实现分页
仓促把功能进行实现一下 类与类之间也没有进行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 {@Overridepublic 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 == -1) {s.delete(bean);} else if (oper == 0) {s.update(bean);} else if (oper == 1) {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")@Overridepublic 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语句得到数据库中记录总数*/@Overridepublic int getAllRowCount(String hql) {Session session = HibernateSessionFactory.getSession();Transaction tx = null;int allRows = 0;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;} }
2.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 == 0) ? (allRows / pageSize) : (allRows / pageSize) + 1;return totalPage;}/*** 得到当前开始记录号** @param pageSize 每页记录数* @param currentPage 当前页* @return*/public int getCurrentPageOffset(int pageSize, int currentPage) {int offset = pageSize * (currentPage - 1);return offset;}/*** 得到当前页, 如果为0 则开始第一页,否则为当前页** @param page* @return*/public int getCurPage(int page) {int currentPage = (page == 0) ? 1 : 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;}}
3.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开始*/@Overridepublic 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;} }
4.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, 1);if (user == null)return ERROR;return SUCCESS;}//修改数据public String updLine() throws Exception{user= tUserDaoImpl.busOper(user, 0);if(user==null) return ERROR;return SUCCESS;} //删除数据public String delLine() throws Exception{user= tUserDaoImpl.busOper(user, -1);//设计的很巧妙if(user==null) return ERROR;return SUCCESS;}//当前页数显示数据public String PageAll() throws Exception{//表示每页显示3条记录,page表示当前网页System.out.println("点击首页链接,进来了,返回出pageBean对象");PageBean pageBean = tUserServiceImpl.getPageBean(3, page);System.out.println(page);HttpServletRequest request = ServletActionContext.getRequest();request.setAttribute("pageBean", pageBean);//通过struts.xml的配置把pageBean值送到jsps/Alldata.jspreturn 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;} }
5.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")[0].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="5">共<font color="red"><s:property value="#request.pageBean.totalPage" /></font>页 </font> <font size="5">共<font color="red"><s:property value="#request.pageBean.allRows" /></font>条记录</font><br><br><s:if test="#request.pageBean.currentPage == 1">首页 上一页</s:if><s:else><%--进入此展示页面 必须点击首页链接 才会触动action去执行逻辑函数--%><a href="TUserAction.action">首页</a> <a href="TUserAction.action?page=<s:property value="#request.pageBean.currentPage - 1"/>">上一页</a></s:else><s:if test="#request.pageBean.currentPage != #request.pageBean.totalPage"><a href="TUserAction.action?page=<s:property value="#request.pageBean.currentPage + 1"/>">下一页</a> <a href="TUserAction.action?page=<s:property value="#request.pageBean.totalPage"/>">尾页</a></s:if><s:else>下一页 尾页</s:else></center><br><center><form action="TUserAction" οnsubmit="return validate();"><font size="4">跳转至</font><input type="text" size="2" name="page">页<input type="submit" value="跳转"></form></center> </body> </html>
hibernate和struts实现分页相关推荐
- hibernate和struts2实现分页功能
1.DAO层接口的设计,定义一个PersonDAO接口,里面声明了两个方法: public interface PersonDAO {public List<Person> queryBy ...
- 使用hibernate和struts2实现分页功能
想着每天能学个新东西,今天准备了这个hibernate+struts2实现页面的分页功能,在这里,首先要感谢 http://www.blogjava.net/rongxh7/archive/2008/ ...
- 解决hibernate对Sql Server分页慢的问题
解决hibernate对Sql Server分页慢的问题 参考文章: (1)解决hibernate对Sql Server分页慢的问题 (2)https://www.cnblogs.com/firstd ...
- struts实现分页_在TensorFlow中实现点Struts
struts实现分页 If you want to get started on 3D Object Detection and more specifically on Point Pillars, ...
- 主题:Hibernate/Spring/Struts架构使用OpenSessionInView的问题
今天有一个朋友问了我一个问题,他使用的是Hibernate/Spring/Struts架构,配置使用Spring的 OpenSessionInView Filter,但是发现不生效,lazy的集合属性 ...
- mysql智能停车场,智能停车场管理系统设计与实现(Hibernate和Struts,MySQL)
智能停车场管理系统设计与实现(Hibernate和Struts,MySQL)(论文11800字,程序代码,MySQL数据库) 摘要:本论文旨在设计一款停车管理系统.本系统基于J2EE标准,采用B/S架 ...
- 基于hibernate和struts的网上书店系统的设计与实现
技术:Java.JSP等 摘要: 在互联网快速发展的带动下,电子商务也得到了快速发展.本设计实现的是一个简单的B2C网上书店系统即卖书的电子商务网站,本论文就此网上书店系统进行详细全面的论述. 本设计 ...
- hibernate、struts、spring mvc的作用
Hibernate工作原理及为什么要用? 原理: 1.读取并解析配置文件 2.读取并解析映射信息,创建SessionFactory 3.打开Sesssion 4.创建事务Transation 5.持久 ...
- myeclipse 中解决Hibernate 和Struts 2的冲突
在新建一个项目的时候,如果一个项目中新建一个Hibernate 同时也新建一个Struts 2,那么就会发生冲突. 因为 Hibernate 自带的antlr-2.7.6和Struts 2自带an ...
最新文章
- 探索Java语言与JVM中的Lambda表达式
- 6、 restful API
- 《ASP.NET Core 3 框架揭秘(上下册)》送书结果公告
- 【C#】byte[]数据转化相关操作
- 如何编制试算平衡表_试算平衡表的编制
- debian分区方案(就这个看着靠谱点)转
- cognos ibm 收购_IBM Cognos与Linux上的Sterling Selling and Fulfillment Suite集成
- 你还发现了CSDN那些变化
- springboot + vue开发环境搭建
- cad插入块_CAD中的块,用得好,画图快人一步!
- 固态硬盘是什么接口_固态硬盘都有哪些接口,是否通用吗?
- tensorflow(gpu) win10安装 1060显卡驱动
- 一线协议—ds18b20
- 临湘东经子午线经度_地区经度查询_实用查询工具大全 - Powered by Senlon!
- 华钜同创:拯救你的亚马逊销量!你需要知道这些技巧
- 如何使用真机测试运行HarmonyOS应用
- unity3D用什么语言开发好?
- 一些需要用到的latex语句
- python的字符串切片操作
- string find的用法详解
热门文章
- T-SQL select语句连接两个表
- ES6-ES11新特性_ECMAScript_简单介绍---JavaScript_ECMAScript工作笔记001
- 持续集成部署Jenkins工作笔记0010---创建工程并配置源码管理
- IOS工作笔记003---windows给VmWare虚拟机OS系统安装xcode
- 教大家多个域名绑定一个空间的解决办法,原创,自己已经测试过了,完全可以绕过杀毒软件,以及空间商.
- 8 Tactics to Combat Imbalanced Classes in Your Machine Learning Dataset
- java 杭电1237简单计算器
- java基础案例教程试题,Java基础案例教程-中国大学mooc-试题题目及答案
- python编程(pdb调试)
- 用汇编的眼光看C++(开篇)