读书人

struts2.0 + hibernate + oracle 分页

发布时间: 2012-09-15 19:09:28 作者: rapoo

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什么的还不懂 也不会用!多多指教!

读书人网 >软件架构设计

热点推荐