`
ygxdha
  • 浏览: 5964 次
最近访客 更多访客>>
社区版块
存档分类
最新评论

S2Dao 实现分页的一些经验

阅读更多
S2Dao是seasar下面的一个字项目,使用annotation + interface的方式实现了dao层。下面是给公司做培训时所写文章的节选。主要是分页底层的一些使用方法。公司项目的架构采用了s2struts+s2dao+seasar。s2struts和seasar部分在分页上的实现因为该项目设计上的特殊性,没有广泛代表意义,就没帖出来了。


1:底层的实现原理。
S2Dao中,只需要传入DAO函数的参数实现了PagerConditon这个interface,再加上j2ee.dicon里面的配置,在dao层就自动提供了分页功能。PagerCondtion的用处是用于提供分页所需要的必要信息,以及返回分页查询后所附带的一些信息,其中需要提供的信息有limit,offset,返回的信息有count.
Offset:本次查询从那条数据开始。
Limit:一次查询返回的结果数。

Count:查询结果的记录总数量。

S2Dao本身提供一个类叫DefaultPagerCondition,该类实现了PagerCondition。算是分页的默认实现。

S2Dao分页在Jdbc层的实现有2种
1:利用Jdbc中ResultSet的滚动游标实现。
2:利用数据库的特有功能实现。Oracle支持rowNum,MySql和PostgreSQL支持的Limit,Offset.


其中的配置可以参考http://s2dao.seasar.org/ja/s2pager.html,这里就不详细介绍了。这里介绍下这2者之间的区别。
1:使用ResultSet的滚动游标来实现分页。有些数据库并不支持这个功能,比如我们项目的oracle10g,所以查询的时候虽然返回的记录条数是limit限制了的,不过实际上查询会把所有的记录都返回到内存里面,如果有10w条记录,很可能就出现内存泄漏的情况。所以就这个意义上来说,使用ResultSet的分页已经失去了原有的意义。

2:数据库的特有支持。我们的项目使用的是oracle10g。所以最后采用了rowNum的方法。
S2Dao会包装你原有的Sql语言,将原来的一句SQL变成三句SQL,发送给数据库。具体的实现可以参考 OracleRownumPagingSqlRewriter。因为原来的一句语言变成了三句SQL,所以采用这种分页有可能降低查询的效率。你可以参考OracleRownumPagingSqlRewriter实现自己的AbstractPagingSqlRewriter来优化效率。比如我们的项目中就定义了自己的rowNum查询语言,引入了with语句。


分享到:
评论
4 楼 cyberblue 2008-08-13  
用iBATIS,想怎么实现就怎么实现。
3 楼 yirentianran 2008-08-13  
如果要和数据库相关就多提供写数据库支持啊!
2 楼 20062633 2008-07-03  
感觉很不错!不过我的看法都是一般不要用数据库上的一些特有功能。分页其实自己实现也不错撒!系统和数据库要做到完全无关啊!
1 楼 cindy_taozhiang 2008-03-28  


哎.本来就茫茫然了  又看到最后的几句,,,就完全没的兴趣了


使用ResultSet的滚动游标来实现分页。有些数据库并不支持这个功能,比如我们项目的oracle10g,所以查询的时候虽然返回的记录条数是limit限制了的,不过实际上查询会把所有的记录都返回到内存里面,如果有10w条记录,很可能就出现内存泄漏的情况。所以就这个意义上来说,使用ResultSet的分页已经失去了原有的意义。

2:数据库的特有支持。我们的项目使用的是oracle10g。所以最后采用了rowNum的方法。
S2Dao会包装你原有的Sql语言,将原来的一句SQL变成三句SQL,发送给数据库。具体的实现可以参考 OracleRownumPagingSqlRewriter。因为原来的一句语言变成了三句SQL,所以采用这种分页有可能降低查询的效率。你可以参考OracleRownumPagingSqlRewriter实现自己的AbstractPagingSqlRewriter来优化效率。比如我们的项目中就定义了自己的rowNum查询语言,引入了with语句

相关推荐

    S2SH实现分页显示、分页模板源代码

    本篇将详细解析如何在S2SH框架下实现分页显示,并提供相关的源代码参考。 首先,理解分页的基本原理:分页是将大量数据分割成若干小块,每次只加载一部分到页面上。用户可以点击页码或使用导航按钮来切换不同的数据...

    S2SH分页实现

    本示例着重讲解如何在S2SH框架下实现分页功能,这对于处理大量数据的展示和管理至关重要,能够提高用户体验并减轻服务器负载。 首先,我们来了解Struts2、Hibernate和Spring各自的角色: 1. **Struts2**:作为MVC...

    S2dao架包集合

    - **RowMapper**:将数据库查询结果映射到Java对象的接口,S2dao提供了一些默认实现,如`BeanHandler`和`MapHandler`。 - **SqlBuilder**:用于构建SQL语句的工具类,可以根据条件动态生成SQL。 ### 4. 使用S2dao的...

    基于Annotation并对DAO层封装具有分页功能的S2SH整合实例

    通过这样的整合,我们不仅实现了基于Annotation的S2SH整合,还增强了DAO层的封装性和复用性,同时引入了分页功能,提升了用户体验。这个实例对理解S2SH框架的协同工作,以及在实际项目中如何应用这些技术有很好的...

    s2sh分页,s2sh分页

    下面将详细讲解`s2sh`框架下实现分页的原理、步骤以及常见问题。 一、Struts2分页 Struts2作为MVC框架,负责处理用户请求和视图展示。在分页中,Struts2主要通过Action来处理请求,定义分页参数,并转发到对应的...

    S2SH购物车+HibernateTemplate分页

    在S2SH购物车项目中,持久层的分页功能是通过Hibernate和HibernateTemplate实现的。这通常涉及到使用Criteria、Query或HQL语句配合FirstResult和MaxResults参数来限制返回的结果集大小,从而达到分页效果。这样的...

    使用配置文件对DAO层封装具有分页功能的S2SH整合实例_好资源0分送

    本文档旨在详细介绍如何使用配置文件的方式完成DAO层的封装,并在此基础上实现分页功能,最终达成S2SH(Struts、Spring、Hibernate)的整合。此文档作为对《使用Annotation并对DAO层封装具有分页功能的S2SH整合实例...

    s2sh 增删改查带分页,项目 很实用, 带jar 包

    Struts2的分页功能通常通过拦截器或自定义插件实现,能够轻松实现数据展示的分页效果。 2. **Spring**:Spring作为核心容器,提供DI(依赖注入)和AOP(面向切面编程)功能,简化了对象的管理和事务处理。在S2SH中...

    s2sh注解增删改 分页

    【标题】"s2sh注解增删改 分页"涉及的是基于Struts2、Spring和Hibernate这三种技术集成的Web开发框架S2SH中的一个重要实践:使用注解进行数据操作(增删改)以及实现分页功能。在这个场景中,开发者通过在Java类和...

    使用Annotation并对DAO层封装具有分页功能的S2SH整合实例_好资源0分送

    本文将详细介绍如何通过使用注解来实现一个具备分页功能的DAO层封装,并完成S2SH(Struts + Spring + Hibernate)框架的整合实例。 #### 二、核心知识点解析 ##### 1. 注解(Annotation) - **定义**:注解是Java...

    sysUser S2SH 框架+分页+ajax用户时实验证

    在S2SH框架中,这通常会涉及用户实体类(User)、服务接口(UserService)及其实现类、DAO接口(UserDAO)及其实现类,以及相关的Struts2 Action和视图模板。 综上所述,"sysUser S2SH 框架+分页+ajax用户时实验证...

    S2SH项目中的分页组件

    总结来说,S2SH项目中的分页组件通过封装分页逻辑,使得在Action和JSP中实现分页变得简单。开发者只需要关注设置分页参数和在JSP中渲染分页链接,而具体的数据库查询和结果处理则由DAO层处理。这种设计模式提高了...

    S2SH+MySql做的分页

    本项目以"S2SH+MySql"(即Struts2、Hibernate、Spring与MySQL数据库)为基础,实现了分页功能,下面将详细介绍这一技术及其实施过程。 首先,Struts2是Java企业级开发中的一个MVC框架,负责处理用户请求并转发到...

    S2SH做的上传下载和分页

    这个项目主要是利用这三个框架实现文件的上传和下载功能,并且包含了分页显示数据的功能。 首先,Struts2作为MVC(Model-View-Controller)框架,负责处理用户的请求,将用户界面与业务逻辑分离。它提供了Action类...

    S2SH 核心类

    总的来说,S2SH框架提供了一种结构化的方式来实现Web应用的分页功能,通过合理的设计和配置,可以有效地管理各个层的职责,提高代码的可读性和可测试性。理解并熟练掌握这三个框架的核心类及其交互方式,对于Java ...

    S2SH增删改查分页

    在S2SH中,实现分页通常需要结合Hibernate的Criteria查询或者HQL(Hibernate Query Language)来设置分页参数。 在提供的"im2010.sql"文件中,可能包含了数据库的初始结构和测试数据。这可能是为了快速搭建测试环境...

    s2sh基础框架实现增,删改查及分页的功能。连接oracle

    在这个特定的项目中,"s2sh基础框架实现增,删改查及分页的功能。连接oracle",我们主要讨论以下几个关键知识点: 1. **Struts2框架**:Struts2是基于MVC(Model-View-Controller)设计模式的Java Web框架,用于...

    S2SH整合(含jar包)+分页

    在S2SH框架中,可以使用Struts2的插件或自定义拦截器实现分页功能,通常需要配合数据库查询来限制返回的数据量,并提供上一页、下一页等导航链接。 在项目中,可能包含的jar包有Struts2、Spring、Hibernate的核心库...

    一个优秀的万能分页可以继承S2Sh

    ### 一个优秀的万能分页可以继承S2Sh:详细解析与实现 #### 一、概念理解 在软件开发特别是Web应用开发过程中,分页功能是必不可少的一部分,它能够有效地处理大量数据展示的问题,使用户界面更加友好。本文将详细...

Global site tag (gtag.js) - Google Analytics