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 {
@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>
<font size="">共<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 - "/>">上一页</a>
</s:else> <s:if test="#request.pageBean.currentPage != #request.pageBean.totalPage">
<a href="TUserAction.action?page=<s:property value="#request.pageBean.currentPage + "/>">下一页</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" onsubmit="return validate();">
<font size="">跳转至</font>
<input type="text" size="" name="page">页
<input type="submit" value="跳转">
</form> </center>
</body>
</html>
hibernate和struts实现分页的更多相关文章
- hibernate和struts2实现分页功能
1.DAO层接口的设计,定义一个PersonDAO接口,里面声明了两个方法: public interface PersonDAO { public List<Person> queryB ...
- hibernate与struts框架实现增删改查
这里配置hibernate与struts不再过多赘述,配置搭建前文已经详细讲解,配置如下: hibernate.hbm.xml配置: <?xml version="1.0" ...
- 解决hibernate对Sql Server分页慢的问题
一.hibernate分页 hibernate对MsSql的伪分页 分页是web项目中比不可少的一个功能,数据量大的时候不能全部展示必然要用到分页技术.相信大家对hibernate中的分页都不陌生: ...
- 关于使用MyEclipse自动生成Hibernate和Struts出现的jar不兼容的问题(antlr.collections.AST.getLine()I)
今天做Hibernate和Struts2结合的练习,使用MyEclipse自动创建Hibernate和Struts的相关配置文件和jar包,写完一个查询方法后,准备测试一下结果,简单的查询那种,很诡异 ...
- Hibernate和Struts分页查询
分页查询数据库方法 /** * 分页查询方法 * @param sql,pageNO,maxResult * @return List */ public List<Object> que ...
- Struts+Hibernate+jsp页面 实现分页
dao层数据库代码: package com.hanqi.dao; import java.util.ArrayList; import java.util.List; import org.hibe ...
- Hibernate+jsp+struts+spring做增删该查,
同样还是web项目,这里只做了一张表,做一个测试,例子.主要是建Hibernate 的时候要非常注意,有时间了整理一下建Hiberbnate 的时候需要注意的事项 这里我是建了5个包,其实只要四个就好 ...
- 【Spring实战-3】Spring整合Hibernate、Struts
作者:ssslinppp 1. 摘要 版本: Spring4.0.4:Hibernate4.3.5:struts2.3.16: 主要介绍了如下内容: 项目结构的规划: Spring下整合Hi ...
- hibernate、struts、spring mvc的作用
Hibernate工作原理及为什么要用?原理:1.读取并解析配置文件2.读取并解析映射信息,创建SessionFactory3.打开Sesssion4.创建事务Transation5.持久化操作6.提 ...
随机推荐
- Swift - 用CATransform3DMakeRotation实现翻页效果
Swift - 用CATransform3DMakeRotation实现翻页效果 效果 源码 https://github.com/YouXianMing/Swift-Animations // // ...
- Easyui numberbox获取焦点事件
Html文件: <input id="auctionBrandNoGetByHand" style="width:160px;" class=" ...
- [Android Pro] 自己动手编译Android源码(超详细)
cp from : https://www.jianshu.com/p/367f0886e62b 在Android Studio代码调试一文中,简单的介绍了代码调试的一些技巧.现在我们来谈谈andro ...
- 【BZOJ】【4145】【AMPPZ2014】The Prices
状压DP/01背包 Orz Gromah 容易发现m的范围很小……只有16,那么就可以状压,用一个二进制数来表示买了的物品的集合. 一种简单直接的想法是:令$f[i][j]$表示前$i$个商店买了状态 ...
- 整理:FPGA选型
针对性整理下FPGA选型问题 一.获取芯片资料: 要做芯片的选型,首先就是要对有可能要面对的芯片有整体的了解,也就是说要尽可能多的先获取芯片的资料.现在FPGA主要有4个生产厂家,ALTERA,XIL ...
- fasttext介绍和试用
http://fasttext.apachecn.org/cn/docs/v0.1.0/support.html fasttext介绍网站 https://github.com/facebookres ...
- [leetcode]Insert Interval @ Python
原题地址:https://oj.leetcode.com/problems/insert-interval/ 题意: Given a set of non-overlapping intervals, ...
- [leetcode]Trapping Rain Water @ Python
原题地址:https://oj.leetcode.com/problems/trapping-rain-water/ 题意: Given n non-negative integers represe ...
- Qt学习之路(28): 坐标变换
经过前面的章节,我们已经能够画出一些东西来,主要就是使用QPainter的相关函数.今天,我们要看的是QPainter的坐标系统. 同很多坐标系统一样,QPainter的默认坐标的原点(0, 0) ...
- Java 读取 .properties 配置文件
java 开发中,经常要读取 properties 配置文件,下面介绍几种读取方式: 1.基于 InputStream 读取配置文件 该方式的优点在于可以读取任意路径下的配置文件 Properties ...