linansengling

 

java 实现分页技术(Structs+Hibernate+MySQL)

    通过Structs+Hibernate+MySQL数据数来实现分页技术的应用. 
   
   源程序下载
   至于Hibernate, Structs, MySQL的具体用法我就不说了,你可以看源程序来查看详细内容.我们来看看分页应用的相关内容.
 架构上和Spring JPetStore没多少区别, 只是没用Spring框架所以Structs中的UserdisplayAction中必须new出各个对象并完成它们之间的关联, 这就是Spring IOC可自动完成的功能. 它也是三层:表现层(Structs), 业务层(POJO), 数据层(Hibernate访问MySQL). 同样业务层通过DAO接口(UserDAO)来访问数据库, 访问数据库的通过Hibernate(在UserDAOImpl中实现). 这一次分页要在业务层中来实现, 业务层同样向表现层提供一个Facada(门面,  UserManager接口), 来访问业务. 在UserManagerImpl中通过调用UserDAO来访问数据, 调用POJO来实现分页功能. 看以下关键代码.

先看POJO的分布类吧:

Page.java

package org.flyware.util.page;

public class Page { 
    
    private boolean hasPrePage; 
    
     private boolean hasNextPage; 
        
    private int everyPage; 
    
    private int totalPage; 
        
    private int currentPage; 
    
      private int beginIndex; 
    
    
      public Page(){
       
    } 
    
        public Page(int everyPage){
        this.everyPage = everyPage;
    }
   
    /** The whole constructor */
    public Page(boolean hasPrePage, boolean hasNextPage, 
                    int everyPage, int totalPage,
                    int currentPage, int beginIndex) {
        this.hasPrePage = hasPrePage;
        this.hasNextPage = hasNextPage;
        this.everyPage = everyPage;
        this.totalPage = totalPage;
        this.currentPage = currentPage;
        this.beginIndex = beginIndex;
    }

      ......    
      
   public int getTotalPage() {
        return totalPage;
    } 
   
    public void setTotalPage(int totalPage) {
        this.totalPage = totalPage;
    }
   
}

PageUtil.java(用来构造Page实例 相当于page工厂)

package org.flyware.util.page;

public class PageUtil {
   
    private static final Log logger = LogFactory.getLog(PageUtil.class); 
    
       public static Page createPage(Page page, int totalRecords){ 

        return createPage(page.getEveryPage(), page.getCurrentPage(), totalRecords);
    } 
    
        public static Page createPage(int everyPage, int currentPage, int totalRecords){
        everyPage = getEveryPage(everyPage); 

        currentPage = getCurrentPage(currentPage); 

        int beginIndex = getBeginIndex(everyPage, currentPage); 

        int totalPage = getTotalPage(everyPage, totalRecords); 

        boolean hasNextPage = hasNextPage(currentPage, totalPage); 

        boolean hasPrePage = hasPrePage(currentPage);
       
        return new Page(hasPrePage, hasNextPage, 
                                everyPage, totalPage,
                                currentPage, beginIndex);
    }
   
    private static int getEveryPage(int everyPage){
        return everyPage == 0 ? 10 : everyPage;
    }
   
    private static int getCurrentPage(int currentPage){
        return currentPage == 0 ? 1 : currentPage;
    }
   
    private static int getBeginIndex(int everyPage, int currentPage){
        return (currentPage - 1) * everyPage;
    }
       
    private static int getTotalPage(int everyPage, int totalRecords){
        int totalPage = 0;
               
        if(totalRecords % everyPage == 0)
            totalPage = totalRecords / everyPage;
        else
            totalPage = totalRecords / everyPage + 1 ;
               
        return totalPage;
    }
   
    private static boolean hasPrePage(int currentPage){
        return currentPage == 1 ? false : true;
    }
   
    private static boolean hasNextPage(int currentPage, int totalPage){
        return currentPage == totalPage || totalPage == 0 ? false : true;
    }
   

}



业务实现类 UserManaerImpl.java

package com.linan.service.impl;

public class UserManagerImpl implements UserManager {
   
    private UserDAO userDAO;

       public void setUserDAO(UserDAO userDAO) { 

        this.userDAO = userDAO; 

    } 
  
//提供业务方法

public Result listUser(Page page) throws HibernateException,

ObjectNotFoundException { 

        int totalRecords = userDAO.getUserCount(); 

        if(totalRecords == 0) 

            throw new ObjectNotFoundException("userNotExist", null);
 
        page = PageUtil.createPage(page, totalRecords); 

        List users = userDAO.getUserByPage(page);   
   
        return new Result(page, users); 

    }

}


DAO数据访问实现类 UserDAOImpl.java

package com.linan.dao.impl;

public class UserDAOImpl  implements UserDAO {

  ...........

      public List getUserByPage(Page page) throws HibernateException { 

        String querySentence = "FROM user in class com.linan.bo.Userlist"; 

        Query query = getSession().createQuery(querySentence); 

         //实现分页功能

        query.setFirstResult(page.getBeginIndex()) 

                .setMaxResults(page.getEveryPage()); 

        return query.list(); 

    }

}

表现层Structs中的Action UserdisplayAction.java

package com.linan.struts.action;

public class UserdisplayAction extends Action {

   public ActionForward execute(
  ActionMapping mapping,
  ActionForm form,
  HttpServletRequest request,
  HttpServletResponse response) {

   Page page=new Page(); 

        UserManagerImpl userManager=new UserManagerImpl();

        UserDAOImpl userDAO=new UserDAOImpl();

        userManager.setUserDAO(userDAO);

       //掉用业务代理完成分页

        Result result=userManager.listUser(page);

        List list=result.getContent();

        HttpSession session=request.getSession();

        session.setAttribute("list",list);

  return mapping.findForward("displayGo");

 }

}


 

posted on 2006-09-21 00:42 fds 阅读(5135) 评论(30)  编辑  收藏 所属分类: JAVA

评论

# re: java 实现分页技术(Structs+Hibernate+MySQL) 2006-09-21 00:50 HotJava

我想要个源文件,hotjava_zj@sina.com,谢谢  回复  更多评论   

# re: java 实现分页技术(Structs+Hibernate+MySQL) 2006-09-21 08:33 Anubis

1 抵制新浪信箱.
2 给我发一份 fiolvivi@gmail.com  回复  更多评论   

# re: java 实现分页技术(Structs+Hibernate+MySQL) 2006-09-21 09:00 cctv

能提供一份吗?li98311@tom.com  回复  更多评论   

# re: java 实现分页技术(Structs+Hibernate+MySQL) 2006-09-21 09:02 kisscheng

谢谢:kisscheng@citiz.net  回复  更多评论   

# re: java 实现分页技术(Structs+Hibernate+MySQL) 2006-09-21 09:24 新新人类

多谢wuxj888@yahoo.com.cn  回复  更多评论   

# re: java 实现分页技术(Structs+Hibernate+MySQL) 2006-09-21 10:56 onejavaer

能给我一份源文件吗 我想研究一下用法 谢谢 `~~ EMAIL:onejavaer@126.com  回复  更多评论   

# re: java 实现分页技术(Structs+Hibernate+MySQL) 2006-09-21 11:56 为了生活而继续

谢谢 lianjiping@163.com  回复  更多评论   

# re: java 实现分页技术(Structs+Hibernate+MySQL) 2006-09-22 11:05 koujian

嘿嘿,那天给我发的petstore很不错,这个也给我发个吧
kjb1520032000@163.com  回复  更多评论   

# re: java 实现分页技术(Structs+Hibernate+MySQL) 2006-09-23 10:35 fjufirefox

能给我一份源文件吗 谢谢 `~~
EMAIL: fjufirefox@gmail.com  回复  更多评论   

# re: java 实现分页技术(Structs+Hibernate+MySQL) 2006-09-23 16:54 nbsp

也能给我一份源文件吗?谢谢!
nbspnbsp@126.com  回复  更多评论   

# re: java 实现分页技术(Structs+Hibernate+MySQL) 2006-09-25 08:31 nk912114

nk912114 (at) 163.com
thanks   回复  更多评论   

# re: java 实现分页技术(Structs+Hibernate+MySQL) 2006-10-03 02:21 thl

流口水了
ad-hunter@hotmail.com
万分感谢!
国庆快乐!
中秋快乐!  回复  更多评论   

# re: java 实现分页技术(Structs+Hibernate+MySQL) 2006-11-19 09:39 yh

yanghuw@163.com
谢谢
  回复  更多评论   

# re: java 实现分页技术(Structs+Hibernate+MySQL) 2006-11-22 17:59 我也想要个源码!

ssd1021@hotmail.com谢谢  回复  更多评论   

# re: java 实现分页技术(Structs+Hibernate+MySQL) 2006-12-10 20:13 yan[匿名]

bbxyhaihua@163.com谢谢!  回复  更多评论   

# re: java 实现分页技术(Structs+Hibernate+MySQL) 2006-12-14 22:41 赵兰科

也能给我一份源文件吗?谢谢!
lankeabc@yeah.net  回复  更多评论   

# re: java 实现分页技术(Structs+Hibernate+MySQL) 2006-12-28 09:09 jrww

因自己是初学者,我急需这块的技术,能麻烦你发一份源码给jrww@sina.com  回复  更多评论   

# re: java 实现分页技术(Structs+Hibernate+MySQL) 2006-12-29 10:29 俞晓坚

可以给我一份源文件吗想学习下
yuxia2217@163.com
谢谢!  回复  更多评论   

# re: java 实现分页技术(Structs+Hibernate+MySQL) 2007-01-05 14:35 cmy

可以给我一份源文件吧!
谢谢!!!
email:
chimeiyu126com@126.com  回复  更多评论   

# re: java 实现分页技术(Structs+Hibernate+MySQL)[未登录] 2007-02-09 13:15 yy

我也要一份
syand2004@163.com  回复  更多评论   

# re: java 实现分页技术(Structs+Hibernate+MySQL) 2007-04-23 10:54 xiao

给我一分源代码好不!xiaolou19850905@163.com  回复  更多评论   

# re: java 实现分页技术(Structs+Hibernate+MySQL) 2007-07-31 14:28 sruic

能给我一份源码吗?sruic@126.com
谢谢  回复  更多评论   

# re: java 实现分页技术(Structs+Hibernate+MySQL) 2007-08-18 21:18 AlfredGao

可以给我一份源文件吧!
谢谢!!!
email:
someday666@163.com   回复  更多评论   

# re: java 实现分页技术(Structs+Hibernate+MySQL) 2007-10-01 10:48 学生

国庆节快乐!
我对您写的程序非常看兴趣,
能否发给我原程序吗?谢谢!
struts.student@gmail.com  回复  更多评论   

# re: java 实现分页技术(Structs+Hibernate+MySQL) 2007-11-05 18:48 chaiqi

也麻烦您给我发一个!非常感谢!

chaiqi1@hotmail.com  回复  更多评论   

# re: java 实现分页技术(Structs+Hibernate+MySQL) 2008-04-21 15:42 webman

请问Result是哪个包里面的东西,还是自己写的?  回复  更多评论   

# re: java 实现分页技术(Structs+Hibernate+MySQL) 2008-06-24 09:43 ;

;  回复  更多评论   

# re: java 实现分页技术(Structs+Hibernate+MySQL)[未登录] 2008-07-18 12:24 robin

其实spring中有这个分页类,蛮好用的,  回复  更多评论   

# re: java 实现分页技术(Structs+Hibernate+MySQL) 2009-05-24 12:12 qianmz

qmzpanda@163.com
我也想看看源代码...谢谢您  回复  更多评论   

# re: java 实现分页技术(Structs+Hibernate+MySQL) 2009-08-12 17:06 sunnywolf

没撒技术含量。  回复  更多评论   


只有注册用户登录后才能发表评论。


网站导航:
博客园   IT新闻   Chat2DB   C++博客   博问  
 

导航

统计

常用链接

留言簿(3)

随笔分类(12)

随笔档案(13)

文章分类(1)

文章档案(2)

相册

收藏夹(3)

my like

最新随笔

搜索

最新评论

阅读排行榜

评论排行榜