纯JDBC系统的开发随想
前两天,两个个纯后台应用项目在没有充分论证的情况下使用了Spring+iBatis实现,从需求到实现、测试历经两天时间,实际代码开发时间是8小时,时间比较短,因为有以前的代码积累。再加上对框架熟烂于心,就像聊天一般的把系统实现了。
今天,迫于压力,需要推翻重做,只允许用JDBC,包括日志工具包,其他的一概不让使用。我也挺郁闷的,刚做好测完了,又要推翻重来-----沉住气,硬是花了6个小时时间把这两个项目的后台代码全用JDBC实现了,不是说写JDBC代码快,而是因为给予对需求和数据库有了透彻理解的基础上。
写这些不是想发什么牢骚,而是对JDBC有了一些思考。如果现在谁要说自己系统用JDBC所写,很容易让人瞧不起,感觉很低级。因为JDBC太基础,用的好与用不好有着天壤之别。就像一把利剑,是否对你有利要看你握着剑柄还是剑刃。
着这里,我不是因为项目用了JDBC费劲而批判什么,而是要为JDBC正个身,把自己开发JDBC系统的体验与大家分享,JDBC好与不好全看你怎么用了。
本人看过无数的JDBC代码,很多系统,有初学者的,有老手的。但没看过很优雅分层的JDBC系统。很多代码都是面向过程式的往下堆,看着到处的try。。。catch,操作结果集代码,早已把业务逻辑淹没了,这可以说是一般JDBC系统的通病。
JDBC是在开发者很郁闷,代码不好写,不好维护,不好分层,那用它干啥啊,大多数开发者一般会首先考虑一个问题,自己实现一个系统,怎么做代价更小的问题。因此JDBC在第一轮的权衡下就被Out了。
对此问题进一步分析,看看能不能找到更好的解决方式。
JDBC代码为什么不好写?要管理数据库连接,要复用连接提高性能,要将结果集与Bean自动绑定,要管理事务,要处理众多的SQLException。
JDBC为什么不好维护,因为代码不好写,写得很烂,业务和数据混杂在一起,这样能好维护吗?
JDBC为什么难以分层,跨层调用Connection谁来管理,如何做到复用,事务控制在哪层?如何提交事务?如何将业务和数据分离,还需要DAO吗?
基于以上问题的分析,我把我实现过程中的一些经验总结出来与大家分享,并不能算最好,也许更好的。
1、包装一个JDBC工具类,可产静态产生连接和执行各种SQL。这是最基本的,可以省去很多重复的代码。必要的话可以自己实现各连接池,或者用开源的。这样,操作数据库的最低级代码得到了一次大的减肥。
2、而考虑系统的分层,系统分层是很必要的,逻辑清晰,易于维护,数据和业务分离。因此应该有DAO层,其次是服务层(业务层)Service,有了这两层,业务-数据实基本上已经实现分离了。
3、建立了层,那么下来就是如何管理层之间的调用,主要是数据库连接,这里常常看到一个很低级也不容易发现的设计上缺陷:在DAO中创建SQL连接,处理SQLException、并用完后立即关闭。这表面上看似没有错,但不要忘记了,事务是在Service上,事务应该放到Service层上做控制。你在DAO中把这些活都干了显然不合理,再说很多DAO调用才形成了一个业务,显然那样做,一个业务的实现需要多次打开和关闭数据库连接,这是导致性能急剧下降的原因。因此得出一个结论,不要再DAO层去管理连接。因此可以考虑在每个Service业务中获取数据连接,在业务中将Connection传递给DAO,在DAO中不要处理异常,上抛吧,以便业务层捕获并处理。对比Spring的事务处理,也是将每个业务方法的数据库连接都保存在一个线程变量中,这样既实现了连接复用,也方便了事务控制。
4、如何用JDBC实现高级框架的关联查询。典型的就是一多关系查询。这里可以分两步实现,实际上Hibernate、iBatis也是分两步来实现,看看SQL便可知道了。而且要注意两个ResultSet嵌套时候的关系,如果是多层的,更应该注重这种层次关系。
5、以上问题都解决了,还有几个不爽的地方,ResultSet到Bean对象集合的转换,这个可以通过Apache Commons DBUitls来得到解决;数据库持久化类的书写,我写了200行左右的工具,可以轻松解决。动态条件SQL拼装,这个问题是非常有挑战性的,目前我就用if。。else。。。做个简单判定来拼装。很麻烦,可以学习下iBatis的源码,看看如何实现。
6、对于事务控制,目前没有需求,但是已经也考虑到了,可以使用JDBC自己的事务管理,也可以使用cglib或者开源的工具来实现,多高的复杂度,要看你的时间来决定了。
到目前为止,我的项目也不是那么完美,还有很多地方可以不用硬编码,但是时间和精力有限。也希望和大家一块讨论。
另外,对于MySQL数据库,如果要连接多个数据库,并且这多个数据库在一个MySQL上,可以用一个数据库连接URL就行,然后在SQL中就可以动态指定操作的是哪个数据库上表。这样避免为一个数据库创建一个连接管理配置。

纯JDBC系统的开发随想相关推荐

  1. ERP(进纯销)系统如何开发,各类型系统都应该怎么做?

    描述:erp系统的开发方案 流程:基础版–运营版 描述:适用于所有企业的erp系统开发及定位 一.生鲜配送行业erp系统 该类系统包含 采购 财报 分类 商品规格 重量 入库 消耗 门店 存量计算 财 ...

  2. 基于JDBC的JavaWeb开发项目之——网上教务系统

    基于JDBC的JavaWeb开发项目之--网上教务系统 在这个文章里,我会详细的解释JavaWeb其中的一个框架--MVC框架来完成网上教务系统这一个项目.这个项目是使用JDBC去连接数据库,使用了J ...

  3. JSP商品进出库管理系统myeclipse开发sql数据库bs框架java编程jdbc 详细设计

    一.源码特点      JSP 商品进出库管理系统是一套完善的web设计系统,对理解JSP java编程开发语言有帮助,系统具有完整的源代码和数据库,开发环境为TOMCAT7.0,Myeclipse8 ...

  4. 基于SSH的婴幼儿产品销售系统的开发与设计毕业设计论文

    源码下载 http://www.byamd.xyz/hui-zong-1/ 摘要 科学技术日新月异的进步,让人类生活发生了巨大的变化,计算机技术的飞速发展,使各行各业在计算机技术应用方面得到了广泛的普 ...

  5. 送给SQL开发者的一份新年礼物!麦聪软件发布一款纯Web化SQL开发工具,免安装还免费!

    2023年新年伊始,麦聪软件再次迎来一个好消息:一款100%自主研发的纯Web化SQL开发工具--SQL Studio 1.0正式发布.这款产品让SQL开发者在Navicat.DBeaver之外,又多 ...

  6. freemarker中运算符_如何在Web应用系统表示层开发中应用Velocity模板技术

    软件项目实训及课程设计指导--如何在Web应用系统表示层开发实现中应用Velocity模板技术 1.分离Web表示层的数据处理和展现逻辑的常见的应用技术 分离Web表示层的数据处理和展现逻辑是目前企业 ...

  7. 电池电堆及发动机的测试软件,燃料电池发动机测试系统的开发

    燃料电池发动机测试系统的开发 维普资讯 http://doc.docsou.com 第 5总第 1期)期( 4 7 20年 l 03 0月 车 用 发 动 机 N .( e a N .4 ) o 5 ...

  8. Java生鲜电商平台-App系统架构开发与设计

    Java生鲜电商平台-App系统架构开发与设计 说明:阅读此文,你可以学习到以下的技术分享 1.Java生鲜电商平台-App架构设计经验谈:接口的设计 2.Java生鲜电商平台-App架构设计经验谈: ...

  9. 后悔没早点看这篇直播系统定制开发入门篇

    直播想必大家都不陌生了,在互联网的风口下,以及5G技术的推动,流量带宽的提高,使得直播在我们生活中扮演着越来越重要的角色.本文先来讲一下入门直播需要了解的一些基本概念,搜集整理了直播入门需要了解的一些 ...

最新文章

  1. 图论 ---- B. Graph Subset Problem (图中找k阶完全子图 or 找一个子集里面的点的度数都打过k)
  2. 有关进行单元测试的时候,不去调本地代码去掉dubbo上的服务
  3. Zookeeper概念学习系列之分布式事务
  4. tensorflow 利用索引获取tensor特定元素
  5. Mysql主从常见问题
  6. python 字符串 f_Python字符串格式化f-string多种功能实现
  7. windows快捷键十八式(win10)
  8. vue.js 默认选中select_vue.js 解决v-model让select默认选中不生效的问题
  9. 网易云信,发送验证码短信C#版代码
  10. 第二篇 python基础知识总结:数据、运算符
  11. pat 乙级 1001 害死人不偿命的(3n+1)猜想(C++)
  12. 智能车学习(二十)——浅谈C车硬连接与软连接
  13. 我的春Phone之行
  14. service docker start后docker stop/waiting的解决方法
  15. 无法远程连接SQLSERVER2000的解决方法
  16. Easyui 默认图标以及自定义图标
  17. 小米线刷包需要解压么_小米6详细的线刷教程,手把手教你降级
  18. 锐浪HTML5报表实际应用方法,解决锐浪Grid++报表在谷歌等浏览器不兼容的尴尬局面
  19. ios、iphone越狱获取系统文件权限
  20. Visual Studio 2022 启用CodeLens - 程序抬头显示(查看字段、方法、类的引用)

热门文章

  1. JAVA_SE基础——24.面向对象的内存分析
  2. Linux 第十周学习笔记(2)smtp服务的部署
  3. 整理iOS9适配中出现的坑
  4. 【原创】ucos信号量的操作及原理
  5. 鄙人之斗,读IT之洋(1)
  6. 提供程序未返回 ProviderManifestToken 字符串
  7. Spring Security3源码分析-http标签解析(转)
  8. SAP BW系统日常维护日常工作及常见的Infopackage错误
  9. [转]Linux中如何自动启动服务
  10. vSphere 4系列之六:Standard vSwitch