设为首页 收藏本站
查看: 958|回复: 0

[经验分享] 对apache开源数据库工具dbutils微改第一版

[复制链接]

尚未签到

发表于 2015-8-6 08:04:14 | 显示全部楼层 |阅读模式
最近在项目中用到jdbc的持久化工具,采用了开源的组件dbutils。由于在持久化中某种原因需要对dbuitls就行修改以适合项目需要,所以看了一下dbutils的源码。就自己读改源码的过程作一篇博客,以作纪念。
    Dbutils设计非常精巧,代码非常精炼,可惜在源码中未能知道作者是谁。里面的核心主要是两个接口----resultsethandler和rowprocessor。Resultsethandler主要是对resultset进行处理得到特定的集合,通过对Resultsethandler的不同实现完成了由resultset向各种集合类的转化,我认为Resultsethandler实现时对泛型的运行相当的令人惊叹。而rowprocessor则主要是对resultset中的某一行进行处理,得到对应的元素(分别为Array,map或是bean)。
    主要的类图如下。

DSC0000.gif
在读源码的过程中,发现其中有些费解的地方,看了好多遍一直觉得不慎妥当,于是班门弄斧,自己对源码进行了微改。
    在rowprocessor的接口定义中有toArray,toMap,toBean,toBeanList。前面三个很好理解,对resultset中的一行进行处理得到对应的元素。但是toBeanList是什么意思呢?一行怎么能转换成一个List?在beanListHandler中发现其中存在一个beanprocessor,作用相当于basicrowprocessor,却又没有实现rowprocessor接口,它只有两个重要的方法:toBean和toBeanList;beanListHandler是利用它来实现tobean和toBeanList的,这与ArrayListHandler,MapListHandler思路有很大的不同,同时我认为将toBeanList这个方法放到rowprocessor接口中相当的不妥,这与rowprocessor的其他三个方法定义有很大的不同。再细看,推测作者可能是因为beanListHandler的效率问题,不是象ArrayListHandler一样直接循环调用rowprocessor的tobean方法,才提出这样一个toBeanList将其放入rowprocessor,这只是一种推测,总之toBeanList这个方法出现在rowprocessor令人感觉很突兀和费解。
    于是对源码进行修改如下:
1,去掉了rowprocessor接口中的toBeanList方法定义。
2,去掉了beanprocessor类,而是将其功能放到了basicrowprocessor中。
3,修改beanListHandler类,使其与其他rowprocessor的实现类似。
修改后的源码如下。

对于源码调整后的类图如下。

DSC0001.gif
及时调整后,我们在项目中要求将一个resultset直接序列化成json格式。那么怎么来实现呢?Rowprocessor没有toJson的方法将某一行转换成json格式。那么只能自己直接写一个实现类resultsethandler了。但是如果只是将某一行转换成json或是csv格式呢,就像ArrayHandler那样,又该怎么办呢?这时Rowprocessor接口不易扩展的局限性就暴露出来了。

如何改进,请收藏并关注后续博文。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-94553-1-1.html 上篇帖子: apache项目概览 下篇帖子: apache与tomcat负载集群的3种方法
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表