论坛首页 Java企业应用论坛

『讨论』ibatis的翻页

浏览 13668 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2006-08-18  
软件环境:
最近在做一个项目的架构设计,框架准备采用webwork+spring+ibatis。项目要在3个月左右的时间内完成50个左右的模块的设计,开发,测试(4个人),晕呀,这怎么可能呢。
这几天在做ibatis的封装,采用了spring的ibatistemplate。在做翻页时,遇到了些问题,大家以前有谁遇到过吗?大家讨论下吧。
1.ibatis的PaginatedList
   这个类是专门负责翻页的,但它的翻页是假翻页,还是把所有数据都读到result中再进行翻页,而且也不提供记录总数的值(我想,这个值可能是要再查一遍count(*)数据吧?)
2.如果要为每个翻页查询在xml文件中写两个select(一个count(*),一个数据),感觉很累赘。难道就没有别的办法了吗?
3.ibatis是一个sql mapping工具,看了他的文档,没有提供对某种数据库专门的翻页机制,比如mysql用limit,oracle用rownum。所以,让他支持真翻页难道还要在每个select语句中增加rownum这个条件吗?
4.我记得好象以前在坛子里有个人回复过关于ibatis真翻页的事,但找了好久,一直没找到。晕呀。。
配置文件:
    
错误提示信息:
   
你的分析:
   发表时间:2006-08-18  
由于不同的数据库有不同的翻页机制,所以我的做法是写了两个sql,分别处理不数据集和数据总数.
我觉得使用iBatis就是觉得它的灵活性,自由度大,可控性强.
对ibatis自己的那个分页真的是不敢恭维.希望能看到有什么跟好的解决方案.
0 请登录后投票
   发表时间:2006-08-18  
PaginatedList还没来得及细心看,它继承了List接口,具体有一个PaginatedArrayList类实现。但这种翻页在数据量大的情况下不可行。我始终觉得做到数据库翻页是最好的。但如果让每个业务模块都去写两个sql语句,而且其中一个还要加上rownum,这反倒感觉很累赘。如果有办法把这两步封装起来,会节省很多不必要的时间的。
0 请登录后投票
   发表时间:2006-08-20  
翅膀 写道
PaginatedList还没来得及细心看,它继承了List接口,具体有一个PaginatedArrayList类实现。但这种翻页在数据量大的情况下不可行。我始终觉得做到数据库翻页是最好的。但如果让每个业务模块都去写两个sql语句,而且其中一个还要加上rownum,这反倒感觉很累赘。如果有办法把这两步封装起来,会节省很多不必要的时间的。

提个想法,如果现在客户有个需求,增加对所有数据动态按任何某些字段做排序,有否好的解决方案?
0 请登录后投票
   发表时间:2006-08-21  
KayMO 写道
翅膀 写道
PaginatedList还没来得及细心看,它继承了List接口,具体有一个PaginatedArrayList类实现。但这种翻页在数据量大的情况下不可行。我始终觉得做到数据库翻页是最好的。但如果让每个业务模块都去写两个sql语句,而且其中一个还要加上rownum,这反倒感觉很累赘。如果有办法把这两步封装起来,会节省很多不必要的时间的。

提个想法,如果现在客户有个需求,增加对所有数据动态按任何某些字段做排序,有否好的解决方案?


不知道KayMO是不是想通过这个需求向我说明一些什么问题,我先说说我对这个需求的理解吧。
如果有这个需求,咱们先想想,这个需求是否可以抽象出来?
某些字段是否可以排序,这些字段如果是说单表的话,默认应该是指所有字段。而排序只不过是选择某几个字段进行相应的排序,如果,我们默认所有字段为升序。当读取选择的某几个排序字段时,再按指定的几个字段排序即可。
至少,我觉得这个需求的代码级别可以抽象出来。至于xml的sql,用 order by $order1$,$order2$这种方式去替换就可以了吧。。。。
0 请登录后投票
   发表时间:2006-08-30  
翅膀 写道
KayMO 写道
翅膀 写道
PaginatedList还没来得及细心看,它继承了List接口,具体有一个PaginatedArrayList类实现。但这种翻页在数据量大的情况下不可行。我始终觉得做到数据库翻页是最好的。但如果让每个业务模块都去写两个sql语句,而且其中一个还要加上rownum,这反倒感觉很累赘。如果有办法把这两步封装起来,会节省很多不必要的时间的。

提个想法,如果现在客户有个需求,增加对所有数据动态按任何某些字段做排序,有否好的解决方案?


不知道KayMO是不是想通过这个需求向我说明一些什么问题,我先说说我对这个需求的理解吧。
如果有这个需求,咱们先想想,这个需求是否可以抽象出来?
某些字段是否可以排序,这些字段如果是说单表的话,默认应该是指所有字段。而排序只不过是选择某几个字段进行相应的排序,如果,我们默认所有字段为升序。当读取选择的某几个排序字段时,再按指定的几个字段排序即可。
至少,我觉得这个需求的代码级别可以抽象出来。至于xml的sql,用 order by $order1$,$order2$这种方式去替换就可以了吧。。。。

没有,只是个想法,刚好项目也碰到一些类似的问题。
0 请登录后投票
   发表时间:2006-08-30  
可以看看我的实现
http://forum.iteye.com/viewtopic.php?t=22159
或许对你有些帮助,数据库是oracle,但是别的数据库也应该有类似的实现
0 请登录后投票
   发表时间:2006-08-30  
我改了一下iBATIS的源码,提供了一个查询效率高的实现方法。

目前支持的数据库主要有Oracle/SQL Server/My SQL
0 请登录后投票
   发表时间:2006-08-31  
hzxia 写道
我改了一下iBATIS的源码,提供了一个查询效率高的实现方法。

目前支持的数据库主要有Oracle/SQL Server/My SQL


噢,是吗,可以拿上来大家共享一下吗?
我觉得最好的解决方法其实也就是改ibatis的源码。。
0 请登录后投票
   发表时间:2006-09-03  
呵呵,我是在一个循环翻页里计数得到总页数,然后用它的API来求出总记录数。
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics