最近快被 Hibernate 給坑哭了,有了自己動手實作 ORM 映射 DAO 的沖動。
工作之餘折騰了快一星期,總算是有點小成就。
現打算将過程記錄下來,友善自己後續回顧填補遺漏。

無論你項目中使用的是什麼樣的 ORM 架構[Hibernate/MyBatis.....],或者是現在大熱的領域模型 DSL DAO層,都是在傳統 JDBC的基礎上進行的封裝。
騷年如果你上手就是 DAO 層架構,沒有見過上述的幾個家夥的話,建議你反編譯 JDK去和他們打個招呼。
傳統 JDBC 實作擷取資料庫資料的代碼(随上圖序列圖)
PreparedStatement/Statement 提供的兩種不同的運作 執行Sql 事物對象。
PreparedStatement 為預編譯 Sql,執行前已經被編譯,DBMS 隻需執行即可,這就意味這 這種形式的 Sql 語句執行效率相當高。
Statement 為執行時才會進行編譯Sql,然後被 DBMS 執行,是以這個對象在執行 Sql 不是很頻繁時,相對不錯。
PreparedStatement 效率高,還可以有效的防止 Sql 注入,但會占用多餘的記憶體空間(用于預編譯)。
就好像是胸大,臀漂亮的妹子,臉不好看,你需要犧牲一部分東西,去換取另外一部分東西,沒有絕對完美的選擇。
JDBC 通路資料庫的方式是最高效的,沒有之一,好比是進階程式設計語言的效率永遠不可能高于底層彙編語言是一樣的道理。
但是 JDBC 對于程式員來說太難駕馭了,沒辦法将關系資料庫中的資料抽象到 Java的面向對象的世界。
下面是我業餘時間在摸索出來的不依靠任何架構,隻使用 JDK自帶的注解和反射的 DAO 層實作,
其中還有很多的問題,但是大體的樣子已經很可愛了。
a.定義你自己的 DAO 表名注解
b.在 POJO (與資料庫表結構對應) 中是添加 TableName 注解
d.擷取注解表名、組織 Sql 、調整姿勢
e.熟悉的JDBC 操作、擷取查詢結果集、反射填充POJO屬性
f. 将 ResultSet 擷取的值 轉換 POJO 屬性時,判斷邏輯稍微多一點,基本囊括了主流的 java 基本類型...
View Code
d.項目中的使用方式
PO、Map 作為參數,使用方式是不是很簡單呢?
隻是對查詢進行了的封裝,後續需要關注下更新和插入、與Spring 的 整合、資料連接配接池的整合....
本文轉自Orson部落格園部落格,原文連結:http://www.cnblogs.com/java-class/p/5512407.html,如需轉載請自行聯系原作者