sql dao增刪改查
sql封裝
在sql dao框架的架構開發中,重點需要處理的是對增刪改查sql的封裝,如何簡化sql拼接操作,使上層應用能夠很方便的接入開發並提升開發效率,下面是需要我們考慮的2個問題。
1. 對象關係映射ORM。
2. 多條件查詢條件封裝。
增
新增add操作對應是是sql dml中的insert操作,用於向資料庫插入一條新的記錄,在實際使用中,基本沒人願意每次插入新寫一條insert語句來支持,目前大部分框架支持的就是ORM來映射,通過一個entity對象對應資料庫中的欄位,然後通過反射來拼接需要的insert語句,但實際開發是複雜的,有可能我們這個entity對象包含了冗餘欄位或者有欄位名稱與資料庫是不對應的,那這種我們如何解決呢?
- ## entity對象包含了冗餘欄位
在這種情況,orm反射拼接insert sql語句時是需要排除掉對應的欄位的,可以給對應的欄位加上註解@VirtualProperty,每次反射獲取數據時根據發現存在此註解則表示排除此欄位。
- ## entity欄位名稱不對應
這種與上面類似,可以加個註解,如@DataProperty,如果反射發現欄位上有此註解,則表示使用DataProperty中的name去拼接。
還要一個問題就是新增的時候如果有唯一鍵衝突怎麼辦,還好mysql中有ON DUPLICATE KEY UPDATE這種方式,我可以利用起來,預留一個待實現的OnDuplicatedUpdate OnDuplicatedKeyUpdate(DomainObject object)給調用方法去實現,如果實現了則會拼接update相關的語句。
刪和改
表名等可以從meta類上的註解獲取到,直接拼接delete或update語句然後去執行就可以了。
查
sql dao查詢需要解決如下2個問題
- ## ORM中meta類包含自定義欄位
自定義欄位,可能是String轉List,這種轉化規則是我們無法用通用方法去處理的,只能交給包含了自定義欄位的meta對應的dao自己去解析實現,因此可以定義一個protected DomainObject getObjectFromRs(ResultSet rs) 供子類去自己實現。
- ## 查詢條件如何封裝,比如分頁
條件封裝太多容易造成使用困惑,因此將limit offset和根據欄位排序封裝即可。
題外話
sql框架還有一個重要的功能需要實現,那就是監控命中率,使用AtomicLong 記錄即可。


※Cron表達式、定時任務
※J2EE RestFul服務介紹
TAG:程序員小新人學習 |