`
sydxide2006
  • 浏览: 69845 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

Hibernate 多表查询分页核心代码

阅读更多
java 代码
  1. /**   
  2.   * 多表分页,然后影射成JAVABEAN  
  3.   * @param sqlcount  HSQL计算多表查询的总数  
  4.   * @param sqllist  HSQL多表查询的语句  
  5.   * @return  List  
  6.   * @throws InvocationTargetException   
  7.   * @throws IllegalAccessException   
  8.   * @throws InstantiationException   
  9.   * @throws IllegalArgumentException   
  10.   * @throws ClassNotFoundException   
  11.   * @throws NoSuchMethodException   
  12.   * @throws SecurityException   
  13.   * @throws DaoException  
  14.   */  
  15.  public List mutiTableList(String sqlcount,String sqllist,String classname,Class partypes[]) throws DataAccessException, HibernateException, IllegalArgumentException, InstantiationException, IllegalAccessException, InvocationTargetException, ClassNotFoundException, SecurityException, NoSuchMethodException {   
  16.    HttpServletRequest httpRequest = BaseAction.getHttpRequest();   
  17.    System.out.println("执行次数"+(count++));   
  18.    List res = new ArrayList();//将用于存放保存的结果集合   
  19.    org.hibernate.ScrollableResults srs = null;   
  20.    Session session = this.getSession();   
  21.    int total = queryTotalCount(sqlcount);   
  22.    records.setTotalNum(total);   
  23. //   records.setParam(condition);   
  24.    String pageSize = RequestUtil.getParam(httpRequest, "pageSize", String.valueOf(PagedList.DEFAULT_PAGE_SIZE));   
  25.    records.setPageSize(Integer.parseInt(pageSize));   
  26.    int totalPage = records.getTotalPage();   
  27.    RequestUtil.setParam(httpRequest, "pageSize", pageSize);   
  28.    //  用自定义的辅助类来取参数值,如果参数为空,则返回指定的默认值   
  29.    String page = RequestUtil.getParam(httpRequest, "page""1");   
  30.    if (Integer.parseInt(page) > totalPage) {   
  31.     page = "" + totalPage;   
  32.    }   
  33.    // 设置请求页码   
  34.    records.setPage(Integer.parseInt(page));   
  35.      //下面创建一个匿名Query实例并调用它的scroll()方法返回以ScrollableResults形式组织的查询结果   
  36.     Query q = session.createQuery(sqllist);   
  37.              q.setFirstResult(records.getQueryStartNum()-1);   
  38.        q.setMaxResults(records.getQueryEndNum());   
  39.        srs = q.scroll();   
  40.              //将查询结果放入List保存   
  41.              while(srs.next()){   
  42.                Class  cl=Class.forName(classname);   
  43.                Constructor cs = cl.getConstructor(partypes);   
  44.                Object ob[]=new Object[partypes.length];   
  45.                for(int i=0;i
  46.                 if (partypes[i] == String.class){   
  47.                  ob[i]=srs.getString(i);   
  48.                 }   
  49.                 else if (partypes[i] ==int.class){   
  50.                   ob[i]=srs.getInteger(i);   
  51.                 }   
  52.                 else if (partypes[i] ==long.class){    
  53.                  ob[i]=srs.getLong(i);   
  54.                 }   
  55.                 else if (partypes[i] ==short.class){    
  56.                  ob[i]=srs.getShort(i);   
  57.                 }   
  58.                 else if (partypes[i] ==float.class){   
  59.                  ob[i]=srs.getFloat(i);   
  60.                 }   
  61.                 else if (partypes[i] ==double.class){   
  62.                  ob[i]=srs.getDouble(i);   
  63.                 }   
  64.                 else if (partypes[i] ==byte.class){   
  65.                  ob[i]=srs.getDouble(i);   
  66.                 }   
  67.                 else if (partypes[i] ==char.class){    
  68.                  ob[i]=srs.getDouble(i);   
  69.                 }   
  70.                 else if (partypes[i] ==boolean.class){   
  71.                  ob[i]=srs.getDouble(i);   
  72.                 }    
  73.                 else if (partypes[i] ==Date.class){   
  74.                  ob[i]=srs.getDate(i);   
  75.                 }    
  76.                }   
  77.                Object ob2 =cs.newInstance(ob);   
  78.                res.add(ob2);   
  79.              }   
  80.              records.setStart(records.getQueryStartNum());   
  81.              records.setSource(res);   
  82.            String url = httpRequest.getRequestURI();   
  83.        String query = CharUtil.IsoToGbk(httpRequest.getQueryString());   
  84.        records.setRequestURL(url + RequestUtil.getParamQueryString(query));   
  85.        //设置分页参数   
  86.        httpRequest.setAttribute("records", records);   
  87.          return records.getList();   
  88.      }  
java 代码
  1. /**   
  2.   *调用方法   
  3.   *  
  4.   */  
  5. public List listTable1()throws DataAccessException, HibernateException, IllegalArgumentException, SecurityException, InstantiationException, IllegalAccessException, InvocationTargetException, ClassNotFoundException, NoSuchMethodException {   
  6.     String sqlcount="select count(*) from Table1 t, Cclq c where c.ringname=t.name";   
  7.     String sqllist="select t.id,t.name,c.ringname from Table1 t, Cclq c  where c.ringname=t.name";   
  8.     String classname="com.prpsdc.infosystem.model.Test";   
  9.     Class partypes[]=new Class[]{int.class,String.class,String.class};   
  10.     return mutiTableList(sqlcount,sqllist,classname,partypes);   
  11. }  
java 代码
  1. /**
  2. *此类必须有明确的构造函数,如下,mutitablelist方法将通过反射机制将结果映射为此JAVABEAN,以*ArrayList保存.HIbernate的查询结果就是本JAVABEAN的集合.此类无须配置*.HBM.XML
  3. *public Test(int id,String name,String ringname){   }
  4. */
  5. package com.prpsdc.infosystem.model;   
  6.   
  7. public class Test {   
  8. public Test(int id,String name,String ringname){   
  9.     this.id=id;   
  10.     this.name=name;   
  11.     this.ringname=ringname;   
  12. }   
  13. public int id;   
  14. public String name;   
  15. public String ringname;   
  16. public int getId() {   
  17.     return id;   
  18. }   
  19. public void setId(int id) {   
  20.     this.id = id;   
  21. }   
  22. public String getName() {   
  23.     return name;   
  24. }   
  25. public void setName(String name) {   
  26.     this.name = name;   
  27. }   
  28. public String getRingname() {   
  29.     return ringname;   
  30. }   
  31. public void setRingname(String ringname) {   
  32.     this.ringname = ringname;   
  33. }   
  34.   
  35. }   
  36. *
以上的Hibernate分页是我的思想,关于性能方面没有过多的考虑,如果大家有什么建议,给我留言,谢谢!
分享到:
评论

相关推荐

    Hibernate连表查询 Hibernate连表查询

    根据提供的文件信息,我们可以深入探讨Hibernate中的连表查询方法及其应用。下面将详细介绍与标题、描述及部分代码相关的几个核心知识点: ### Hibernate 连表查询基础 Hibernate 是一个开源的对象关系映射(ORM)...

    hibernate 模糊查询 分页

    在IT行业中,ORM(Object-Relational Mapping)框架如Hibernate被广泛用于简化Java...在提供的`SplitPage`文件中,可能包含了具体的实现细节和示例代码,进一步学习这些内容将加深你对Hibernate模糊查询和分页的理解。

    Hibernate各种查询:联表查询 分页查询 位置参数查询(?) 占位符查询(冒号查询) 统计查询

    本篇文章将详细解析Hibernate中的几种主要查询方式,包括联表查询、分页查询、位置参数查询、占位符查询(冒号查询)以及统计查询,这些都是在实际开发中非常常见的需求。 首先,我们来看**联表查询**。在Hibernate...

    Struts和Hibernate分页及查询

    在"Struts+Hibernate分页及条件查询练习"这个项目中,开发者可能采用了以下步骤: 1. **配置Struts和Hibernate**:首先,需要在项目中引入Struts和Hibernate的相关库,配置Struts的struts-config.xml文件和...

    基于spring+hibernate的组合查询+分页组件

    本篇文章将深入探讨如何结合Spring与Hibernate实现高效、灵活的组合查询以及分页功能,这对于提升Web应用程序的性能和用户体验至关重要。 首先,Spring框架是一个全面的Java企业级应用开发框架,它提供了依赖注入...

    用Hibernate实现分页查询.docx

    ### 使用Hibernate实现分页查询 #### 一、分页查询概念及原理 分页查询是一种在数据量较大的情况下,为了提高用户体验和系统性能而采取的一种技术手段。它将查询结果分成若干页显示,用户可以通过翻页操作查看不同...

    struts + hibernate+sprig 的分页源代码

    综上所述,SSH框架集成的分页源代码涉及了多个层次的交互,从用户界面的请求到数据库的查询,再到结果的封装和展示,整个过程都需要精心设计和优化。理解并熟练掌握这些知识点,对于开发高效、健壮的Java Web应用至...

    JQuery,ajax,hibernate+spring,分页查询.rar

    至于“Hibernate分页查询原理解读”,这可能是一个深入解析Hibernate分页机制的文档,包括`FirstResult`和`MaxResults`参数的使用,以及如何有效地缓存查询结果以提高性能。 综合来看,这个压缩包包含了一系列关于...

    springmvc+hibernate+spring maven案例(包含分页查询)

    - 在此案例中,可能使用了Hibernate的`Criteria`或`HQL`查询语言配合`PageRequest`或自定义分页实现,通过指定页码和每页大小来获取特定范围的数据。 6. **文件名:user** - "user"可能是数据库中的一个表名,...

    spring+hibernate+struts实现分页代码

    在Java Web开发中,Spring、Hibernate和Struts是三大核心框架,它们的组合常被称为SSH框架,用于构建高效、可维护的企业级应用。本项目利用这三者来实现分页功能,这是一种常见的需求,特别是在数据量大的情况下,...

    Struts + Hibernate 分页实现

    在数据库查询时,我们需要利用Hibernate的Criteria API或HQL(Hibernate Query Language)来编写分页查询。这通常涉及到设置查询条件、限制查询结果的数量(如每页多少条记录)以及指定查询的起始位置(当前页的第一...

    基于hibernate_mysql分页通用源码

    【标题】"基于hibernate_...综上所述,这个项目提供了一个整合了Hibernate、MySQL、Struts2的分页工具示例,通过研究源码和实际部署,我们可以学习到如何在实际开发中实现高效的分页功能,并加深对这些核心技术的理解。

    hibernate通用分页

    总的来说,"hibernate通用分页"是一个提高开发效率的实用工具,它封装了分页查询的逻辑,使得开发者能更专注于业务逻辑,同时保持代码的整洁和可维护性。通过`Pagehelp`和`Page`类的设计,可以轻松地在不同的查询...

    含分页核心源代码 struts2.1 + hibernate3.3 +spring2.5 + 仿Google数字分页

    这是一个基于SSH(Struts2、Hibernate3.3和Spring2.5)框架的项目,其中包含了一个实现仿Google数字分页功能的核心源代码。在这个项目中,开发者利用这些技术来构建一个具有高效分页能力的Web应用,以提高用户体验并...

    springMVC+spring+hibernate+jquery分页完整项目,完整代码

    本项目是一个基于SpringMVC、Spring、Hibernate和jQuery的完整分页应用,涵盖了后端服务、数据持久化、前端交互等多个重要技术领域。下面将详细解释这些技术及其在项目中的应用。 1. SpringMVC:SpringMVC是Spring...

    struts+hibernate分页 模糊查询

    ### Struts 1.2与Hibernate 3结合实现分页模糊查询 在Web开发领域,Struts框架一直是MVC(Model-View-Controller)架构模式的一个典型代表,它可以帮助开发者更高效地构建出结构清晰、易于维护的应用程序。而...

    开发的 Hibernate+ JSP分页代码.rar

    【标题】:“开发的 Hibernate+ JSP分页代码”指的是一个使用Hibernate ORM框架与JSP技术实现的分页功能的代码示例。这个压缩包包含了实现数据库查询分页展示的完整代码。 【描述】:该描述简洁明了,表明这是一个...

    Struts2 + Spring2 + Hibernate3经典分页(包含java及jsp源码)

    4. **分页**:分页是指将查询结果按照一定数量分割成多个页面展示的技术。常见的分页方法有基于查询结果总数的分页、基于游标的分页等。 #### 三、PageUtil类详解 `PageUtil`类是实现分页逻辑的核心组件。该类定义...

    Hibernate-基础联表模板

    "Hibernate-基础联表模板"是针对Hibernate中联表查询的一个实用工具,旨在帮助开发者快速地进行多表关联查询,而不必记住复杂的SQL语句。 1. **Hibernate简介** Hibernate是一种开源的ORM框架,它允许开发者将Java...

    完整Struts2 HIBERNATE实现分页

    通常,我们会使用Hibernate提供的原生SQL或者HQL来实现分页查询。例如,可以定义一个`SoftDAO`类,并在其内部实现如下方法: ```java public List<Soft> findPaginated(int start, int pageSize) { Session ...

Global site tag (gtag.js) - Google Analytics