ORM思維概述

来源:https://www.cnblogs.com/lisong0626/p/18040958
-Advertisement-
Play Games

ORM,全稱為Object-Relational Mapping,即對象關係映射,是一種程式技術,用於實現面向對象編程語言里不同類型系統的數據之間的轉換。從效果上說,它其實是創建了一個可在編程語言里使用的“虛擬對象資料庫”。 ORM技術位於應用和資料庫之間,作為一層中間件,用於實體對象(例如 POJ ...


ORM,全稱為Object-Relational Mapping,即對象關係映射,是一種程式技術,用於實現面向對象編程語言里不同類型系統的數據之間的轉換。從效果上說,它其實是創建了一個可在編程語言里使用的“虛擬對象資料庫”。

ORM技術位於應用和資料庫之間,作為一層中間件,用於實體對象(例如 POJO)和關係數據(資料庫表的行)之間的轉換。簡單來說,ORM旨在建立領域模型(也稱為實體對象,例如 POJO)和資料庫表之間的映射,使得對實體對象的操作可以轉換為對資料庫表的操作。例如,當需要新增一個實體對象時,只需要創建一個新的實體對象,將數據傳給對象,然後執行存儲操作,ORM框架會自動負責建立實體對象的屬性和資料庫表的欄位的對應,然後自動生成相應的SQL語句並執行,將數據持久化到資料庫。

ORM思維的核心在於將資料庫表結構映射為面向對象編程語言中的實體對象,使得開發者可以使用面向對象的方式進行資料庫操作,而無需關心底層的SQL語句和資料庫表結構。這種思維可以大大提高開發效率,減少維護複雜數據訪問層的成本,同時也使得代碼更加簡潔、易讀和易維護。

總的來說,ORM思維是一種重要的編程思想,它使得開發者可以更加高效地進行資料庫操作,同時也降低了開發難度和成本。在實際開發中,合理使用ORM技術可以帶來很多好處,但也需要註意其可能帶來的問題,如性能問題、過度封裝導致的靈活性降低等。因此,在使用ORM技術時,需要根據實際情況進行權衡和選擇。

最終目的: 讓我們可以使用面向對象思維進行資料庫操作!!!

ORM框架通常有半自動和全自動兩種方式

ORM框架通常分為全自動和半自動兩種方式,這主要取決於框架如何處理數據映射和SQL語句的生成。

全自動ORM框架,如Hibernate,提供了最高級別的自動化。在這種模式下,開發者只需要調用相關介面或方法,框架就會自動完成所有的數據映射和SQL語句生成。例如,開發者可以通過定義實體類(POJO)來映射資料庫表,框架會根據這些實體類自動生成對應的SQL語句,完成數據的增刪改查等操作。這種方式極大地簡化了開發者的工作,但也可能導致一定的靈活性降低,因為開發者無法直接控制生成的SQL語句。

半自動ORM框架,如MyBatis,則需要開發者手動完成一部分工作。在這種模式下,開發者需要自行定義SQL語句,並通過映射文件或註解將SQL語句與實體類關聯起來。框架會根據這些映射關係,將實體對象轉換為SQL語句的參數,以及將查詢結果映射回實體對象。這種方式在提供了一定程度的自動化的同時,也保留了開發者對SQL語句的直接控制,因此靈活性更高。

總的來說,全自動和半自動ORM框架各有優缺點,選擇哪種方式主要取決於開發者的具體需求和偏好。例如,如果開發者希望儘可能地減少手寫代碼和提高開發效率,那麼全自動ORM框架可能是一個更好的選擇。而如果開發者對SQL語句有更高的控制需求,或者希望更好地優化資料庫性能,那麼半自動ORM框架可能更適合。

半自動和全自動 ORM 框架的區別

半自動和全自動 ORM 框架的主要區別在於 SQL 語句的生成和控制權。

全自動 ORM 框架,如 Hibernate,會根據實體類(POJO)和資料庫表之間的映射關係,自動生成對應的 SQL 語句。開發者只需要通過調用框架提供的方法,就可以完成數據的增刪改查等操作,無需手動編寫 SQL 語句。這種方式極大地簡化了開發者的工作,同時也減少了出錯的可能性。但是,由於框架自動生成 SQL 語句,開發者無法直接控制生成的 SQL 語句,因此可能在某些情況下無法滿足特定的需求或優化。

半自動 ORM 框架,如 MyBatis,則需要開發者手動編寫 SQL 語句,並通過映射文件或註解將 SQL 語句與實體類關聯起來。框架會根據這些映射關係,將實體對象轉換為 SQL 語句的參數,以及將查詢結果映射回實體對象。這種方式在提供了一定程度的自動化的同時,也保留了開發者對 SQL 語句的直接控制,因此靈活性更高。開發者可以根據具體需求,編寫和優化 SQL 語句,以滿足特定的需求或提高資料庫性能。

總的來說,全自動和半自動 ORM 框架各有優缺點,選擇哪種方式主要取決於開發者的具體需求和偏好。如果開發者希望儘可能地減少手寫代碼和提高開發效率,那麼全自動 ORM 框架可能是一個更好的選擇。而如果開發者對 SQL 語句有更高的控制需求,或者希望更好地優化資料庫性能,那麼半自動 ORM 框架可能更適合。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 這裡給大家分享我在網上總結出來的一些知識,希望對大家有所幫助 一、如何部署 前後端分離開發模式下,前後端是獨立佈署的,前端只需要將最後的構建物上傳至目標伺服器的web容器指定的靜態目錄下即可 我們知道vue項目在構建後,是生成一系列的靜態文件 常規佈署我們只需要將這個目錄上傳至目標伺服器即可 // ...
  • 寫在前面 學習、寫作、工作、生活,都跟心情有很大關係,甚至有時候我更喜歡一個人獨處,戴上耳機coding的感覺。 明顯現在的心情,比中午和上午好多了,心情超棒的,靠自己解決了兩個問題: 新增的時候點擊TreeSelect控制項控制台會給出報錯 分類新增和編輯時,報錯父類和電子書iD不能為空的問題 富文 ...
  • 這裡給大家分享我在網上總結出來的一些知識,希望對大家有所幫助 一、錯誤類型 任何一個框架,對於錯誤的處理都是一種必備的能力 在Vue 中,則是定義了一套對應的錯誤處理規則給到使用者,且在源代碼級別,對部分必要的過程做了一定的錯誤處理。 主要的錯誤來源包括: 後端介面錯誤 代碼中本身邏輯錯誤 二、如何 ...
  • accent-color 是從 Chrome 93 開始被得到支持的一個不算太新屬性。之前一直沒有好好介紹一下這個屬性。直到最近在給一些系統整體切換主題色的時候,更深入的瞭解了一下這個屬性。 簡單而言,CSS accent-color 支持使用幾行簡單的 CSS 為表單元素著色,是的,只需幾行代碼就 ...
  • 寫在前面 我知道自己現在的狀態很不好,以為放個假能好好放鬆下心情,結果昨晚做夢還在工作,調試代碼,和領導彙報工作。 天吶,明明是在放假,可大腦還在考慮工作的事,我的天那,這是怎麼了? Vue頁面參數傳遞 1、任務拆解 頁面跳轉時帶上當前電子書id參數ebookId 新增/編輯文檔時,讀取電子書id參 ...
  • 1. 有人說 Python 性能沒那麼 Low? 這個我用 pypy 2.7 確認了下,確實沒那麼差, 如果用 NumPy 或其他版本 Python 的話,性能更快。但 pypy 還不完善,pypy3 在 beta, 所以一般情況,我是說一般情況下,這點比較讓人不爽。 2. 有人說怎麼沒有 C#、R ...
  • 歡迎來到從零開始學Spring Boot的旅程!在Spring Boot中,返回JSON數據是很常見的需求,特別是當我們構建RESTful API時。我們對上一篇的Hello World進行簡單的修改。 添加依賴 首先,確保你的build.gradle文件中已經包含了Spring Web的依賴,因為 ...
  • 現在免費證書只能申請三個月(之前還能申請十二個月),擁有acme能力對於小的站點來說就比較需要,可以比較好的部署也不用關心TLS帶來的煩惱。 ...
一周排行
    -Advertisement-
    Play Games
  • 1、預覽地址:http://139.155.137.144:9012 2、qq群:801913255 一、前言 隨著網路的發展,企業對於信息系統數據的保密工作愈發重視,不同身份、角色對於數據的訪問許可權都應該大相徑庭。 列如 1、不同登錄人員對一個數據列表的可見度是不一樣的,如數據列、數據行、數據按鈕 ...
  • 前言 上一篇文章寫瞭如何使用RabbitMQ做個簡單的發送郵件項目,然後評論也是比較多,也是準備去學習一下如何確保RabbitMQ的消息可靠性,但是由於時間原因,先來說說設計模式中的簡單工廠模式吧! 在瞭解簡單工廠模式之前,我們要知道C#是一款面向對象的高級程式語言。它有3大特性,封裝、繼承、多態。 ...
  • Nodify學習 一:介紹與使用 - 可樂_加冰 - 博客園 (cnblogs.com) Nodify學習 二:添加節點 - 可樂_加冰 - 博客園 (cnblogs.com) 介紹 Nodify是一個WPF基於節點的編輯器控制項,其中包含一系列節點、連接和連接器組件,旨在簡化構建基於節點的工具的過程 ...
  • 創建一個webapi項目做測試使用。 創建新控制器,搭建一個基礎框架,包括獲取當天日期、wiki的請求地址等 創建一個Http請求幫助類以及方法,用於獲取指定URL的信息 使用http請求訪問指定url,先運行一下,看看返回的內容。內容如圖右邊所示,實際上是一個Json數據。我們主要解析 大事記 部 ...
  • 最近在不少自媒體上看到有關.NET與C#的資訊與評價,感覺大家對.NET與C#還是不太瞭解,尤其是對2016年6月發佈的跨平臺.NET Core 1.0,更是知之甚少。在考慮一番之後,還是決定寫點東西總結一下,也回顧一下.NET的發展歷史。 首先,你沒看錯,.NET是跨平臺的,可以在Windows、 ...
  • Nodify學習 一:介紹與使用 - 可樂_加冰 - 博客園 (cnblogs.com) Nodify學習 二:添加節點 - 可樂_加冰 - 博客園 (cnblogs.com) 添加節點(nodes) 通過上一篇我們已經創建好了編輯器實例現在我們為編輯器添加一個節點 添加model和viewmode ...
  • 前言 資料庫併發,數據審計和軟刪除一直是數據持久化方面的經典問題。早些時候,這些工作需要手寫複雜的SQL或者通過存儲過程和觸發器實現。手寫複雜SQL對軟體可維護性構成了相當大的挑戰,隨著SQL字數的變多,用到的嵌套和複雜語法增加,可讀性和可維護性的難度是幾何級暴漲。因此如何在實現功能的同時控制這些S ...
  • 類型檢查和轉換:當你需要檢查對象是否為特定類型,並且希望在同一時間內將其轉換為那個類型時,模式匹配提供了一種更簡潔的方式來完成這一任務,避免了使用傳統的as和is操作符後還需要進行額外的null檢查。 複雜條件邏輯:在處理複雜的條件邏輯時,特別是涉及到多個條件和類型的情況下,使用模式匹配可以使代碼更 ...
  • 在日常開發中,我們經常需要和文件打交道,特別是桌面開發,有時候就會需要載入大批量的文件,而且可能還會存在部分文件缺失的情況,那麼如何才能快速的判斷文件是否存在呢?如果處理不當的,且文件數量比較多的時候,可能會造成卡頓等情況,進而影響程式的使用體驗。今天就以一個簡單的小例子,簡述兩種不同的判斷文件是否... ...
  • 前言 資料庫併發,數據審計和軟刪除一直是數據持久化方面的經典問題。早些時候,這些工作需要手寫複雜的SQL或者通過存儲過程和觸發器實現。手寫複雜SQL對軟體可維護性構成了相當大的挑戰,隨著SQL字數的變多,用到的嵌套和複雜語法增加,可讀性和可維護性的難度是幾何級暴漲。因此如何在實現功能的同時控制這些S ...