为什么需要ORM 框架
通過上面的操作,其實我們已經了解ORM 框架的基本實現原理。ORM 是指對象關系映射(Object Relation Mapping),映射的不僅僅只是對象值,還有對象與對象之間的關系。例如一對多、多對多、一對一這樣的表關系。現在市面上ORM 框架也非常之多,有大家所熟知的Hibernate、Spring JDBC、MyBatis、JPA 等。我在這里做一個簡單的總結,如下表:
| Hibernate | 全自動(檔) | 不需要寫一句SQL |
| MyBatis | 半自動(檔) | 手自一體,支持簡單的映射,復雜關系需要自己寫SQL |
| Spring JDBC | 純手動(檔) | 所有的SQL 都要自己,它幫我們設計了一套標準流程 |
既然,市面上有這么多選擇,我又為什么還要自己寫ORM 框架呢?
這得從我的一次空降擔任架構師的經驗說起。空降面臨最大的難題就是如何取得團隊小伙伴們的信任。當時,團隊總共就8 人,每個人水平層次不齊,甚至有些還沒接觸過MySQL,諸如Redis 等緩存中間件就不需要談。基本只會使用Hibernate 的CRUD,而且已經影響到了系統性能。由于工期緊張,沒有時間和精力給團隊做系統培訓,也為了兼顧可控性,于是就產生了自研ORM 框架的想法。我做了這樣的頂層設計,以降低團隊小伙伴的存息成本,頂層接口統一參數、統一返回值,具體如下:
1、規定查詢方法的接口模型為:
/*** 獲取列表* @param queryRule 查詢條件* @return*/ List<T> select(QueryRule queryRule) throws Exception;/*** 獲取分頁結果* @param queryRule 查詢條件* @param pageNo 頁碼* @param pageSize 每頁條數* @return*/ Page<?> select(QueryRule queryRule,int pageNo,int pageSize) throws Exception;/*** 根據SQL獲取列表* @param sql SQL語句* @param args 參數* @return*/ List<Map<String,Object>> selectBySql(String sql, Object... args) throws Exception;/*** 根據SQL獲取分頁* @param sql SQL語句* @param pageNo 頁碼* @param pageSize 每頁條數* @return*/ Page<Map<String,Object>> selectBySqlToPage(String sql, Object [] param, int pageNo, int pageSize) throws Exception;2、規定刪除方法的接口模型為:
?
3、規定插入方法的接口模型為:
/*** 插入一條記錄并返回插入后的ID* @param entity 只要entity不等于null,就執行插入* @return*/ PK insertAndReturnId(T entity) throws Exception;/*** 插入一條記錄自增ID* @param entity* @return* @throws Exception*/ boolean insert(T entity) throws Exception;/*** 批量插入* @param list* @return 返回受影響的行數* @throws Exception*/ int insertAll(List<T> list) throws Exception;4、規定修改方法的接口模型為:
/*** 修改一條記錄* @param entity entity中的ID不能為空,如果ID為空,其他條件不能為空,都為空不予執行* @return* @throws Exception*/ boolean update(T entity) throws Exception;利用這一套基礎的API,后面我又基于Redis、MongoDB、ElasticSearch、Hive、HBase各封裝了一套,以此來講降低團隊學習成本。也大大提升了程序可控性,也更方便統一監控。
?
總結
以上是生活随笔為你收集整理的为什么需要ORM 框架的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 数据一致性理解
- 下一篇: 搭建基础架构-Page