struts2.0 + hibernate + oracle 分页问题
最近弄了下 ?struts2.0 + hibernate + oracle 分页问题的
从网上搜了些资料。总觉得不是很合心意。自己做了例子。
?ueser.sql
DROP TABLE "SCOTT"."T_USER" cascade constraints;DROP SEQUENCE "SCOTT"."Q_USER";CREATE TABLE "SCOTT"."T_USER" ( "ID" CHAR(4 BYTE) NOT NULL ENABLE, "USERNAME" VARCHAR2(20 BYTE) NOT NULL ENABLE, "PASSWORD" VARCHAR2(20 BYTE) NOT NULL ENABLE, CONSTRAINT "T_USER_PK" PRIMARY KEY ("ID") USING INDEX PCTFREE 10 INITRANS 2 MAXTRANS 255 STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645 PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT) TABLESPACE "SYSTEM" ENABLE ) PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 NOCOMPRESS LOGGING STORAGE ( INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645 PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT ) TABLESPACE "SYSTEM" ; CREATE SEQUENCE "SCOTT"."Q_USER" MINVALUE 1 MAXVALUE 9999 INCREMENT BY 1 START WITH 121 CACHE 20 NOORDER NOCYCLE ; Insert into T_USER (ID,USERNAME,PASSWORD) values (Q_USER.nextval,'222','222');
?HibernateUtil.java
package hibernate;import org.hibernate.HibernateException;import org.hibernate.Session;import org.hibernate.SessionFactory;import org.hibernate.cfg.Configuration;/** * Hibernate的工具类. * @author AmigoXie */public class HibernateUtil { private static SessionFactory sessionFactory; /** 持有一个单态的Session实例. */ private static final ThreadLocal threadLocal = new ThreadLocal(); /** 持有一个单态的configuration实例. */ private static final Configuration cfg = new Configuration(); private static String CONFIG_FILE_LOCATION = "hibernate/hibernate.cfg.xml"; static { try { sessionFactory = new Configuration().configure(CONFIG_FILE_LOCATION) .buildSessionFactory(); } catch (Throwable ex) { // Make sure you log the exception, as it might be swallowed System.err.println("Initial SessionFactory creation failed." + ex); throw new ExceptionInInitializerError(ex); } } public static SessionFactory getSessionFactory() { return sessionFactory; } /** * 获得当前的Session实例. * @return Session * @throws HibernateException */ public static Session currentSession() throws HibernateException { Session session = (Session) threadLocal.get(); //if (session == null) { if(session==null||session.isOpen()==false){ if (sessionFactory == null) { try { cfg.configure(CONFIG_FILE_LOCATION); sessionFactory = cfg.buildSessionFactory(); } catch (Exception e) { System.err.println("%%%% Error Creating SessionFactory %%%%" + e.getMessage()); } } session = sessionFactory.openSession(); threadLocal.set(session); } return session; }}
?User.java
package hibernate;public class User {private String id ;private String userName;private String password;public String getId() {return id;}public void setId(String id) {this.id = id;}public String getUserName() {return userName;}public void setUserName(String userName) {this.userName = userName;}public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}}
?hibernate.cfg.xml
<?xml version='1.0' encoding='utf-8'?><!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"><hibernate-configuration> <session-factory> <!-- properties --> <property name="connection.url">jdbc:oracle:thin:@127.0.0.1:1521:JIM</property> <property name="connection.username">scott</property> <property name="connection.password">tiger</property><property name="dialect">org.hibernate.dialect.OracleDialect</property> <property name="connection.driver_class">oracle.jdbc.driver.OracleDriver</property> <property name="show_sql">true</property><property name="format_sql">false</property> <!-- mapping files --> <mapping resource="hibernate/user.hbm.xml"/></session-factory></hibernate-configuration>
?user.hbm.xml
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"><hibernate-mapping package="hibernate"> <class name="User" table="T_USER"> <id name="id" column="ID" type="string"> <generator column="USERNAME" type="string" not-null="true" /> <property name="password" column="PASSWORD" type="string" not-null="true" /> </class></hibernate-mapping>
??IuserDao.java接口
package page;import hibernate.User;import java.util.List;public interface IuserDao {public List<User> displayUser(int offset,int max);public int count();}
?
UserDao.java
package page;import hibernate.HibernateUtil;import hibernate.User;import java.util.List;import org.hibernate.HibernateException;import org.hibernate.Query;import org.hibernate.Session;import org.hibernate.Transaction;public class UserDao implements IuserDao {@Overridepublic List<User> displayUser(int offset, int max) {// TODO Auto-generated method stub//PagerModel<User> pm = null;List<User> list =null;String hsql = "from User ";Session session = HibernateUtil.currentSession();Transaction ts = null;try { ts = session.beginTransaction();Query query = session.createQuery(hsql);query.setFirstResult(offset);query.setMaxResults(max); list = query.list();} catch (HibernateException e) {// TODO Auto-generated catch blocke.printStackTrace();if (ts != null) {ts.rollback();}}finally{session.close();}return list;}@Overridepublic int count() {// TODO Auto-generated method stubint i = 0 ;Session session = HibernateUtil.currentSession();Transaction ts = null;try { ts = session.beginTransaction();Query query = session.createQuery("select count(*) from User");i = (Integer) query.uniqueResult();} catch (HibernateException e) {// TODO Auto-generated catch blocke.printStackTrace();if (ts != null) {ts.rollback();}}finally{session.close();}return i;}}
?
pageAction.java
package page;import java.util.List;import hibernate.User;import com.opensymphony.xwork2.ActionSupport;public class PageAction extends ActionSupport { int i=1;//中间变量 private int k;//储存最大页面数 private int pageNow=1; //页码数,初始为1 private int pageSize = 5 ; //页面行数 private int intRowCount = 0;//总行数 private int intPageCount = 1;//总页数 // private Admin admin; // private List<Admin> Adminss; private User user; private List<User> users; private int id; private int aid; public User getUser() {return user;}public void setUser(User user) {this.user = user;}public List<User> getUsers() {return users;}public void setUsers(List<User> users) {this.users = users;}public int getId() { return id; } public void setId(int id) { this.id = id; } public int getAid() { return aid; } public void setAid(int aid) { this.aid = aid; } public int getPageNow() { return pageNow; } public void setPageNow(int pageNow) { this.pageNow = pageNow; } public int getPageSize() { return pageSize; } public void setPageSize(int pageSize) { this.pageSize = pageSize; } public int getIntRowCount() { return intRowCount; } public void setIntRowCount(int intRowCount) { this.intRowCount = intRowCount; } public int getIntPageCount() { return intPageCount; } public void setIntPageCount(int intPageCount) { this.intPageCount = intPageCount; } public int getK() { return k; } public void setK(int k) { this.k = k; }@SuppressWarnings("unchecked") @Override//显示列表 public String execute() throws Exception { IuserDao npage=new UserDao(); intRowCount=npage.count(); k=(intRowCount + pageSize - 1) / pageSize; intPageCount = (intRowCount + pageSize - 1) / pageSize;//计算出总页数 if(pageNow<1){ pageNow=1; } if(pageNow > intPageCount) pageNow=intPageCount; i = (pageNow -1)*pageSize; IuserDao nlist=new UserDao(); if(null!=nlist.displayUser(i,pageSize)){ users = nlist.displayUser(i,pageSize); return SUCCESS; }else{ return "failure"; } } }
?struts.xml
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd"><struts><package name="users" extends="struts-default"> <action name="list" > <result>/listUsers.jsp</result> <result name="failure">/Showfailure.jsp</result> </action></package></struts>
?
web.xml
<?xml version="1.0" encoding="UTF-8"?><web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5"> <display-name>bornToPage</display-name> <filter> <filter-name>struts2</filter-name> <filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class> </filter> <filter-mapping> <filter-name>struts2</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <welcome-file-list> <welcome-file>index.html</welcome-file> <welcome-file>index.htm</welcome-file> <welcome-file>index.jsp</welcome-file> <welcome-file>default.html</welcome-file> <welcome-file>default.htm</welcome-file> <welcome-file>default.jsp</welcome-file> </welcome-file-list></web-app>
?
listUser.jsp
<%@ page language="java" pageEncoding="UTF-8"%><%@ taglib prefix="s" uri="/struts-tags"%><%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%><% String path = request.getContextPath(); String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + path + "/";%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html> <head> <base href="<%=basePath%>"> <title>My JSP 'index.jsp' starting page</title> </head> <body><center><table border = "1"><tr><td>id</td><td>name</td><td>pass</td></tr><s:iterator value="users" id = "user"><tr><td><s:property value = "#user.id"/></td><td><s:property value = "#user.userName"/></td><td><s:property value = "#user.password"/></td></tr></s:iterator></table></center> <center> 共<s:property value="intRowCount"/>记录 第<s:property value="pageNow"/>页 <s:url id="url_pre" value="list.action"> <s:param name="pageNow" value="pageNow-1"></s:param> </s:url> <s:url id="url_next" value="list.action"> <s:param name="pageNow" value="pageNow+1"></s:param> </s:url> <s:if test="intPageCount!=null"><s:bean name="org.apache.struts2.util.Counter" id="counter"> <s:param name="first" value="1" /> <s:param name="last" ><s:property value="intPageCount"/></s:param> <s:iterator> <s:url id="url" value="list.action"> <s:param name="pageNow" ><s:property /></s:param> </s:url> <s:a href="%{url}"><s:property /></s:a> </s:iterator></s:bean></s:if> <s:if test="pageNow==1"> <s:a href="%{url_pre}">最前一页</s:a> </s:if> <s:else> <s:a href="%{url_pre}">上一页</s:a> </s:else> <s:if test="pageNow==k"> <s:a href="%{url_next}">最后一页</s:a> </s:if> <s:else> <s:a href="%{url_next}">下一页</s:a> </s:else> </center> </body></html>
?
直接jsp运行后 不显示分页 需在地址栏里写上http://localhost:8080/bornToPage/list.action才能正常显示(提前子在数据库多插入几条数据)
1 楼 sarin 2010-10-20 分页还是做成工具类比较好,可以参考 2 楼 595415454 2010-10-20 sarin 写道分页还是做成工具类比较好,可以参考我还是新手, freemaker什么的还不懂 也不会用!多多指教!