日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

为什么需要ORM 框架

發布時間:2024/4/13 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 为什么需要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、規定刪除方法的接口模型為:
?

/*** 刪除一條記錄* @param entity entity中的ID不能為空,如果ID為空,其他條件不能為空,都為空不予執行* @return*/ boolean delete(T entity) throws Exception;/*** 批量刪除* @param list* @return 返回受影響的行數* @throws Exception*/ int deleteAll(List<T> list) throws Exception;

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 框架的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。