struts2.0+hibernate+oracle的分頁詳解 – JAVA編程語言程序開發技術文章

struts2.0 + hibernate + oracle 分頁問題
最近弄瞭下  struts2.0 + hibernate + oracle 分頁問題的

從網上搜瞭些資料。總覺得不是很合心意。自己做瞭例子。

ueser.sql

Sql代碼
DROP TABLE "SCOTT"."T_USER" cascade constraints;  
DROP SEQUENCE "SCOTT"."Q_USER";  
 
CREATE TABLE 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');  

DROP TABLE "SCOTT"."T_USER" cascade constraints;
DROP SEQUENCE "SCOTT"."Q_USER";

HibernateUtil.java

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

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代碼
<?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

Java代碼
<?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 class="assigned"/>  
    </id>  
    <property name="userName"  column="USERNAME"  type="string" not-null="true" />    
    <property name="password"     column="PASSWORD"     type="string" not-null="true" />   
</class>  
 
</hibernate-mapping> 

IuserDao.java接口

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

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 {  
 
    @Override 
    public 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 block  
            e.printStackTrace();  
            if (ts != null) {  
                ts.rollback();  
            }  
        }finally{  
            session.close();  
        }  
          
        return list;  
          
    }  
 
    @Override 
    public int count() {  
        // TODO Auto-generated method stub  
        int 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 block  
              
            e.printStackTrace();  
            if (ts != null) {  
                ts.rollback();  
            }  
              
        }finally{  
            session.close();  
        }  
          
        return i;  
          
    }  
 

pageAction.java

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代碼
<?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" class="page.PageAction" > 
            <result>/listUsers.jsp</result> 
            <result name="failure">/Showfailure.jsp</result> 
        </action> 
 
</package> 
</struts> 
  

web.xml

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

Java代碼
<%@ 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"/>記錄&nbsp;&nbsp;  
        第<s:property value="pageNow"/>頁&nbsp;&nbsp;  
     <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才能正常顯示(提前子在數據庫多插入幾條數據) 

摘自  張曉叢的專欄 

發佈留言