`
gym_1119
  • 浏览: 53087 次
  • 性别: Icon_minigender_1
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

(转载)XIbatis 发布-对ibatis的分页查询进行了扩展和功能增强

阅读更多
Ibatis在项目开发中,无论是企业管理还是电子商务,Productivity作用都非常的大,淋漓尽致的体现了模板的好处,将sql的繁杂的语法和查询条件参数数据清晰的剥离出来,无论是开发速度和代码的易维护性上,都是无可比拟的。

? 但是其中有一个重大的缺陷就是数据库分页查询了,这个就不用多说了,参见 由ibatis引起的框架设计思考

? 喜欢Hibernate的人,可以先去看:Ibatis VS Hibernate,? 我也喜欢Hibernate,但重要的是要解决项目问题,而不是无休无止的争论!

? 不知道为什么,Ibatis对此无动于衷,反而采取了回避的态度,只是将分页的方法depreciated,草草了事。

? 我对于ibatis的源码进行了改造,起名为XIbatis, 改造主要从一下几个方面入手:
??????
??1.提供与具体数据库相关的分页回调接口,调用者可以注入自己的分页实现,并注入到Ibatis中,在分页时进行回调。
????????

?1 public ? interface ?Paginator? {
?2 ???? /**
?3 ?????*?根据原始的sql和pageNo,?pageSize生成分页的sql.
?4 ?????*? @param ?sql
?5 ?????*? @param ?pageNo??当前页号
?6 ?????*? @param ?pageSize??每页的数据条数
?7 ?????*? @return ?分页sql
???????????????? @author? http://www.blogjava.net/oneeyewolf

?8 ????? */

?9 ???? public ?String?getPaginatedSql(String?sql,? int ?pageNo,? int ?pageSize);
10 ????
11 }

????? XIbatis代码内内置了Oracle 和 MySql分页的两种实现:


2.与spring进行了集成,可以灵活的注入不同数据库的分页实现


??3 .由于在原有的接口中,新增了分页查询的方法,所以需要扩展spring 对ibatis的SqlMapClientTemplate的封装。
??????同时XIbatis向后兼容,保留了Ibatis的原来的所有方法。

?????

4.在ibatis的接口中增加了新的分页的方法, :
???????

?1 ? /**
?2 ???*?分页查询
?3 ???*? @param ?id??The?name?of?the?statement?to?execute.
?4 ???*? @param ?parameterObject??查询条件对象
?5 ???*? @param ?pageNo??当前页号
?6 ???*? @param ?pageSize??每页显示的数据条数
?7 ???*? @return
?8 ???*? @throws ?SQLException
??????????* @author? http://www.blogjava.net/oneeyewolf
?9 ??? */

10 ??PageResult?queryForPageResult(String?id,?Object?parameterObject,? int ?pageNo,? int ?pageSize)? throws ?SQLException;
11


5.最后的IbatisDao的实现:

?1 public ? class ?DAOIbatisImpl? extends ?CustomIbatisDaoSupport? {
?2
?3 ???? /**
?4 ?????*?分页查询
?5 ?????*? @param ?id
?6 ?????*? @param ?params??查询参数,里面必须要有一个pageNo的页号参�?
?7 ?????*? @param ?pageSize
?8 ?????*? @return
?9 ????? */

10 ???? public ?PageResult?queryByPagination(String?id,?Map?params,? int ?pageNo,? int ?pageSize)? {
11
12 ???????? return ?getSqlMapClientTemplate().queryForPageResult(id,?params,?pageNo,?pageSize);
13 ????}

14 ????
15 ???? /**
16 ?????*?不分页查询
17 ?????*? @param ?id??查询ID
18 ?????*? @param ?params??查询参数
19 ?????*? @return
20 ????? */

21 ???? public ?List?queryForList(String?id,?Map?params) {
22 ???????? return ? super .getSqlMapClientTemplate().queryForList(id,?params);
23 ????}

24 }

6.源代码文件下载, 点击这里>>
?? 包含:spring配置文件、example for Dao test、source code.
????
?7.RoadMap
??? XIbatis未来将着手对于sql template语法进行改造,已能够适应电子商务网站复杂、多样查询的要求。

????有改造需求的人,可以在这里提出来。

???
20人合租600元/年

posted on 2008-12-01 11:51 Speed 阅读(1053) 评论(4) ?编辑 ?收藏 所属分类: 框架设计J2EEHibernate & Ibatis

<script type="text/javascript"> // </script>

评论

#?re: XIbatis 发布-对ibatis的分页查询进行了扩展和功能增强 2008-12-01 16:09 charlie's logic

good job.??回复??更多评论 ??

#?re: XIbatis 发布-对ibatis的分页查询进行了扩展和功能增强 2008-12-01 17:10 tp

有前途,如果列中带有函数就不建议这么搞了。??回复??更多评论 ??

#?re: XIbatis 发布-对ibatis的分页查询进行了扩展和功能增强 2008-12-02 14:06 stone2083

想法是好的,做法是不可取的。
任何对第三方组件的扩展,需要遵循开放-封闭原则:只能寻找组件的扩展点进行功能扩展,不允许直接修改源码。

试想一下,你修改了源代码,以后如何解决与官方网站版本升级的同步问题?
没有团队敢使用你的包。

很早之间,我就有这个想法。但是发觉MappedStatement,SqlMapExecutorDelegate都是面向实现编程;
并且SqlMapClient也是通过:
public SqlMapConfiguration() {
errorContext = new ErrorContext();
delegate = new SqlMapExecutorDelegate();
typeHandlerFactory = delegate.getTypeHandlerFactory();
client = new SqlMapClientImpl(delegate);
registerDefaultTypeAliases();
}
直接new出来的。
所以,似乎找不到扩展的地方来实现“分页”的需求。

不知道大家是否有更好的方案,欢迎讨论。??回复??更多评论 ??

#?re: XIbatis 发布-对ibatis的分页查询进行了扩展和功能增强 2008-12-02 15:23 Speed

@stone2083
good point, actually you need to balance the pros and cons for your own team. cause it is open source, so if it do not fully match your way, just modify the code to facilitate your application. ??回复??更多评论 ?


礼物 2008-12-08 12:00 发表评论
分享到:
评论

相关推荐

    ibatis 之分页

    6. **源码分析**:理解Ibatis的源码有助于我们更好地利用其分页功能。例如,查看Executor的执行过程,了解参数是如何传递到SQL中的,以及如何与数据库交互。 7. **工具辅助**:除了PageHelper,还有其他如MyBatis-...

    ibatis分页功能

    标题"ibatis分页功能"指的就是如何在iBATIS框架中实现数据库查询的分页效果。分页不仅提高了用户体验,还能减少不必要的数据库负载。 描述中提到,分页功能是通过`page.tld`标签实现的。`tld`文件是JSP Tag Library...

    spring-ibatis-ext-plugin.1.0.0 扩展ibaits原生SQL

    一直以来ibatis的分页都是通过滚动ResultSet实现的,应该算是逻辑分页吧。逻辑分页虽然能很干净地独立于特定数据库,但效率 在多数情况下不及特定数据库支持的物理分页,而hibernate的分页则是直接组装sql,充分...

    ibatis分页

    对于初学者,可以先从学习iBATIS的基础用法开始,逐步掌握如何在实际开发中实现高效、灵活的分页功能。对于进阶学习者,深入源码分析将帮助理解iBATIS的内部工作流程,从而更好地进行定制和优化。

    java经典教程-----ibatis开发指南

    iBatis提供了一种插件机制,可以对Executor、StatementHandler、ParameterHandler、ResultSetHandler等进行拦截,方便用户自定义功能,如性能分析、日志记录等。 通过阅读《Java经典教程——iBatis开发指南》,...

    基于ibatis的分页

    本项目基于ibatis框架实现了分页功能,覆盖了从底层数据库操作到页面展示的完整流程,包括DAO层、Service层、Action层以及JSP页面的展示。 首先,我们来了解一下什么是ibatis。Ibatis是一个优秀的持久层框架,它...

    ibatis实现分页技术

    Ibatis实现分页技术主要依赖于SQL语句中的分页关键字和动态参数,通过在Mapper接口、Controller层和服务层合理封装,可以实现灵活的分页功能。如果配合使用分页插件,如PageHelper,将使分页操作更加便捷。在实际...

    idea-mini-ibatis.zip

    `idea-mini-ibatis` 是一款专为 IntelliJ IDEA 设计的轻量级 iBatis/MyBatis 开发插件,旨在简化和优化在 IDE 中进行 iBatis 或 MyBatis 框架的开发工作。这个插件是开源的,意味着它遵循开放源代码的原则,允许用户...

    资料---ibatis

    本资料包含入门实例和深度学习资源,同时提供了所需的驱动,使得学习和使用Ibatis更加方便。 一、Ibatis简介 Ibatis是由Clinton Begin创建的,它主要解决了Java开发中DAO(Data Access Object)层繁琐的手动SQL编写...

    iBatis分页(基于Struts2和Freemarker)

    在IT行业中,数据库查询的效率和用户体验息息相关,尤其是在数据量庞大的场景下,分页功能显得尤为重要。本知识点将深入探讨如何在Struts2框架中结合iBatis实现基于Freemarker模板的分页功能。 首先,我们需要理解...

    Ibatis.net 分页

    总结起来,Ibatis.NET的分页功能强大且灵活,可以根据项目需求选择适合的实现方式。通过存储过程、动态SQL或扩展库,我们可以轻松地在.NET应用中实现高效、安全的分页查询。在实际开发过程中,要结合数据库最佳实践...

    对IBatis分页的改进,使ibatis支持hibernate式的物理分页.doc

    物理分页是直接在SQL语句中添加LIMIT或OFFSET等关键字,利用数据库自身的分页功能,减少了数据处理的量,提高了查询速度。Hibernate框架就采用了这种策略,其分页效率相对较高。 针对iBatis的这一局限,我们可以...

    对IBatis分页的改进,使ibatis支持hibernate式的物理分页

    公司的大部分项目都开始使用IBatis作为O/R Mapping了,但是在使用的过程中也发现了很多不方便和存在争议的地方,其中一个不方便的地方就是分页,目前的处理方式都是在sqlMap中写针对特定数据库的物理分页Sql语句,对于...

    struts2+spring+ibatis+oracle+分页搜索+上传附件实例

    使用Oracle的分页功能,可以高效地处理大量数据的查询,同时,其强大的数据类型支持附件的存储。 5. **分页搜索**:在Web应用中,分页搜索是提升用户体验的重要手段。通过在后台实现SQL的分页查询,Struts2和Spring...

    Ibatis 2.3.4 数据库无关分页

    在2.3.4这个版本中,Ibatis 提供了数据库无关的分页功能,这是一种在不依赖特定数据库语法的情况下实现分页查询的方法,有助于提高代码的可移植性和维护性。 数据库无关分页的核心思想是将分页参数(如当前页数和每...

    spring3学习笔记(2)-集成ibatis3进行单元测试

    在本篇“Spring3学习笔记(2)-集成ibatis3进行单元测试”中,我们将深入探讨如何在Spring3框架中整合Ibatis3,并利用它来进行单元测试。这个主题对于理解如何在实际项目中实现数据访问层的测试具有重要意义。在现代...

    ibatis_likehbm高效分页组件

    ibatis_likehbm高效分页组件ibatis_likehbm高效分页组件ibatis_likehbm高效分页组件ibatis_likehbm高效分页组件ibatis_likehbm高效分页组件ibatis_likehbm高效分页组件 ibatis_likehbm高效分页组件 ibatis_likehbm...

    Struts2-spring-ibatis 整合及存储过程分页

    本教程将详细讲解如何整合这三大框架,并利用存储过程实现分页功能。 首先,让我们了解这三个框架的核心功能: 1. Struts2:作为Action层框架,它负责接收HTTP请求,处理业务逻辑,并转发到相应的视图。Struts2提供...

    idea-mini-ibatis.jar

    iBATIS和其他持久化框架,如Hibernate之间的显著区别在于,iBATIS强调使用SQL,而其他的框架通常使用一个自定义的查询语言,具有Hibernate查询语言(HQL)或Enterprise JavaBeans的查询语言(EJB QL)。

    spring+ibatis+oracle分页缓存源码

    在本项目中,Oracle可能被用作存储数据的后端,通过SQL查询实现分页功能。 分页缓存则是为了提升用户体验和系统性能而设计的一种策略。在大型数据集的展示中,一次性加载所有数据会消耗大量资源,影响页面加载速度...

Global site tag (gtag.js) - Google Analytics