纯JDBC系统的开发随想
生活随笔
收集整理的這篇文章主要介紹了
纯JDBC系统的开发随想
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
純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系统的开发随想的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: NA-NP-IE系列实验5:配置文件的备
- 下一篇: 在CSDN上的第一篇博客