最近学习hibernate的分页,发现它实现分页比其他方法要简单多了。
以前写了一个分页感觉很麻烦,首先在数据库调用储存过程写一个分页代码,然后在java程序中又去调用储存过程。其大部分代码如下:
public class fenye {
private int totla_page=0;
private int now_page=1;
public List<GoodInfo> fenyetst(int nw_page,String typeid)
{
Connection conn=DBConn. getConnection()
;
Statement stat=null;
ResultSet rs=null;
CallableStatement cs=null;
List<GoodInfo> list=new ArrayList<GoodInfo>();
try {
cs=conn.prepareCall("{call prc_query(?,?,?,?,?,?,?,?,?)}");
cs.setString(1, "t_bookinfor");
cs.setString(2, "typeid="+typeid);
cs.setString(3,"bookid");
cs.setString(4,"asc");
cs.setInt(5,nw_page);
cs.setInt(6, 16);
cs.registerOutParameter(5, oracle.jdbc.OracleTypes.NUMBER);
//cs.registerOutParameter(6, oracle.jdbc.OracleTypes.NUMBER);
cs.registerOutParameter(7, oracle.jdbc.OracleTypes.NUMBER);
cs.registerOutParameter(8, oracle.jdbc.OracleTypes.NUMBER);
cs.registerOutParameter(9, oracle.jdbc.OracleTypes.CURSOR);
cs.execute();
rs=(ResultSet)cs.getObject(9);
BigDecimal t_nowpage=(BigDecimal)cs.getObject(5);
now_page=t_nowpage.intValue();
BigDecimal total=(BigDecimal)cs.getObject(8);
totla_page=total.intValue();
while(rs.next())
{
GoodInfo god=new GoodInfo(rs.getInt(1),rs.getString(2),
rs.getDouble(3),rs.getInt(4),
rs.getString(5),rs.getString(6),
rs.getString(7),rs.getString(8),
rs.getString(9),rs.getInt(10));
list.add(god);
}
用hibernate 的分页,它的底层已经封装好了分页,所以具体细节我们并不需要深究了,我们只要调用query.setFirstResult(pages);query.setMaxResults(size);这个2个方法 就可以实现分页。
分页测试如下:
首先建立一个action。在action里面实现每页查出的数据,然后封装在list中,最后在jsp显示。
action类代码:
package com.xxg.action;
import java.util.ArrayList;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
import com.xxg.bean.Author;
import com.xxg.dao.ListBillUser;
public class Check extends ActionSupport {
public ArrayList<Author> authors = new ArrayList<Author>();
private int page = 0;
private int size = 20; // 初始化时的值,会调用set方法set进去
public int getPage() {
return page;
}
public void setPage(int page) {
this.page = page;
}
public int getSize() {
return size;
}
public void setSize(int size) {
this.size = size;
}
public ArrayList<Author> getAuthors() {
return authors;
}
public void setAuthors(ArrayList<Author> authors) {
this.authors = authors;
}
public String execute(){
ListBillUser lb = new ListBillUser();
authors = lb.firstgetAuthors(page,size);
ActionContext.getContext().getSession().put("page", page);
/*this.setPage(page);
this.setSize(size);
*/
this.setAuthors(authors);
return "list";
}
}
与数据交互的到层
package com.xxg.dao;
import java.util.ArrayList;
import org.hibernate.Query;
import org.hibernate.Session;
import com.xxg.bean.Author;
import com.xxg.util.HiberUtil;
public class ListBillUser {
public ArrayList<Author> firstgetAuthors(int pages,int size){
ArrayList<Author> authors = new ArrayList<Author>();
Session session = HiberUtil.getSession();
String hql = "from Author author";
Query query = session.createQuery(hql);
query.setFirstResult(pages); // 设置从哪条记录开始显示,注意page=0 表示第一条记录
query.setMaxResults(size); // 每页显示的记录条数
authors =(ArrayList<Author>)query.list();
session.close();
return authors;
}
}
前台显示:
<%@ page language="java" import="java.util.*" pageEncoding="gbk"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<%@taglib uri="/struts-tags" prefix="s" %>
<html>
<head>
<base href="<%=basePath%>">
</head>
<body>
<center>
<table border="1" width="40%">
<tr>
<td>编号</td>
<td>姓名</td>
</tr>
<s:iterator value ="authors" var ="au" status="st">
<s:if test ="#st.odd" >
<tr bgcolor ="yellow">
</s:if>
<s:else>
<tr bgcolor ="cyan">
</s:else>
<td><s:property value="#au.id"></s:property></td>
<td><s:property value="#au.name"></s:property></td>
</tr>
<s:set value="xxg" var="2"></s:set>
</s:iterator>
</table>
<!--上一页 -->
<%int page1 =(Integer)session.getAttribute("page");
if(page1==0)
{ %>
<a href = "check?page=<%=0 %>">上一页</a>
<%}
else{
%>
<a href = "check?page=<%=(page1-20) %>">上一页</a>
<% }
%>
<!-- 显示1,2,3,4,5 单页 -->
<%
for(int i=0;i<5;i++){
%>
<a href ="check?page=<%=i*20%>"><%=i+1%>|</a>
<% } %>
<!--下一页 -->
<% if(page1==80)
{ %>
<a href = "check?page=<%=80%>">上一页</a>
<%}
else{
%>
<a href = "check?page=<%=(page1+20) %>">下一页</a>
<% }
%>
<s:debug></s:debug>
</body>
</html>
分页思路:总共一百条记录,每页显示20条。
当发出请求:localhost:8080/Hibe01/check
交给action去处理,初始action里面的page=0 表示从第一跳条记录开始显示,size=20表示每一页显示20条记录,在action里面调用dao层的分页方法,得到分装了记录的list,这个list是根据不同的page,size 值得到不同的记录。最后在jsp页面迭代出list里面的记录。当点击上一页时,会映射到
<a href = "check?page=<%=(page1-20) %>">上一页</a> 动态传值给action 如此反复想像action返送请求,只不过每次的参数不同而已。
在这里遇到一个问题:
本想页面展示全部用struts标签做,结果在实现上一页,和下页功能时,发现
<s:propety value ="page"></s:property> 得到的值不知道该如何参与到计算。
比如说我的得到值为20 我如何能也这个值进行关联计算。所以为了解决这个问题,我又换了jsp标签 采用在aciton里面 将page放在session 里面,在前台用 <%int page1 =(Integer)session.getAttribute("page");> 这样得到的page值就可以在
<% %> 里面参与计算了。
通过写分页的测试,1.在sturs2的action中,属性值如果不设置get,set方法,那么在valuestack中将不会有它的值。属性值如果附上初始值 比如说private int x =10;
那么在valuestack 中会有这个初始值。(前提条件是这个属性有在action里面设置了get/set方法)
2.在jsp中,当用struts2标签 时
<s:iterator value ="authors" var ="au" status="st">
<s:if test ="#st.odd" >
<tr bgcolor ="yellow">
</s:if>
<s:set value="xxg" var="2"></s:set>
其中var 对应的值 都被设置到了stackcontext 里面去了,想在页面访问该元素必须用
#var 去访问
分享到:
相关推荐
ssh spring+stuts+hibernate+sql server 中文乱码解决方案_lj管用.txt
车辆管理系统(struts+hibernate+spring+oracle).rar 对公务用车进行档案、费用、调度、维修、安全、运行等全方位的管理和统计,以方便...
论坛系统(Struts 2+Hibernate+Spring实现)
spring+stuts+hibernate论坛BBS.
毕业设计 基于SSH2实验室电脑管理系统,使用Struts2+Hibernate4.2+Spring3等JavaWeb框架完成
这是BlazeDS的java端工程,其中用的是flex-spring插件,并且实现了服务器主动推送消息给客户端,工程是用maven3来管理的。 另外工程中用到了Struts2 + spring + jpa的整合,其中Struts2与BlazeDS无关。
Demo实现了Spring 管理Stuts 和hibernate 技术(内容很简单,适合初学者)我是因为下载一个没有分了,所以上传一个简单的Demo上去。功能实现了从数据库映射出数据;供参考,含数据.sql文件;(因为spring可以管理...
这个框架实现了基本的增删改查 数据库为mysql 所有jar包都全 自己手动搭的 平台是myeclipse6.0 不是很专业 但是完全能用 希望对大家有所帮助 包中数据库文件 和说明文档都全 大家可以自己看着弄
这是一个 Stuts + Hibernian + 自定义标签封装的分页,随处可以运用,有相应的测试示例,代码结构清晰,有详细注释,可供大家参考学习,若有疑问,加本人QQ:309677572 昵称:张军利
hibernate加上stuts2全套最新资源架包不会出现任何错误
好不容易从网上找到的教如何在eclipse中配置SSH框架,作者不容易,我也不容易!
Stuts2+hibernate3.0+Spring3.0整合
stuts+hibernate实现增删改查的源代码
前几天搞 Spring + Hibernate + Struts 事务配置 ,网上找了好多资料,不过好无语,大多都是 Ctrl + V,浪费俺的宝贵时间 现在我总结配出一套,给大家参考参考,可能有不足,请大家多多交流。 附:内有弹出...
stuts2增删改查再送登录,由stuts2加HIBERNATE+SPING为核心写的代码,数据库为MYSQL,只要大家把数据脚本导入进去就OK。帮助大家提升编写能力。
struts+extjs实现UploadDialog struts+extjs实现UploadDialog
用Struts作为表示层实现,应用Hibernate作为持久层实现,并结合Spring技术作 为业务层实现,进行框架整合,从而设计出了一套足够灵活、松散耦合、可扩展 且高效的Web开发框架;最后,详细论述了该架构在Rox Network...
包括了struts2 Spring所用的jar包,以及struts2跟Spring的配置文件实例
struts2+ajax框架结合,异步传送数据....
完整的SSH集成,STRUTS2.0+SPRING 2.5+ HIBERNATE 3.6完美集成