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
  • PasteSpider是什麼? 一款使用.net編寫的開源的Linux容器部署助手,支持一鍵發佈,平滑升級,自動伸縮, Key-Value配置,項目網關,環境隔離,運行報表,差量升級,私有倉庫,集群部署,版本管理等! 30分鐘上手,讓開發也可以很容易的學會在linux上部署你得項目! [從需求角度介 ...
  • SQLSugar是什麼 **1. 輕量級ORM框架,專為.NET CORE開發人員設計,它提供了簡單、高效的方式來處理資料庫操作,使開發人員能夠更輕鬆地與資料庫進行交互 2. 簡化資料庫操作和數據訪問,允許開發人員在C#代碼中直接操作資料庫,而不需要編寫複雜的SQL語句 3. 支持多種資料庫,包括但 ...
  • 在C#中,經常會有一些耗時較長的CPU密集型運算,因為如果直接在UI線程執行這樣的運算就會出現UI不響應的問題。解決這類問題的主要途徑是使用多線程,啟動一個後臺線程,把運算操作放在這個後臺線程中完成。但是原生介面的線程操作有一些難度,如果要更進一步的去完成線程間的通訊就會難上加難。 因此,.NET類 ...
  • 一:背景 1. 講故事 前些天有位朋友在微信上丟了一個崩潰的dump給我,讓我幫忙看下為什麼出現了崩潰,在 Windows 的事件查看器上顯示的是經典的 訪問違例 ,即 c0000005 錯誤碼,不管怎麼說有dump就可以上windbg開幹了。 二:WinDbg 分析 1. 程式為誰崩潰了 在 Wi ...
  • CSharpe中的IO+NPOI+序列化 文件文件夾操作 學習一下常見的文件、文件夾的操作。 什麼是IO流? I:就是input O:就是output,故稱:輸入輸出流 將數據讀入記憶體或者記憶體輸出的過程。 常見的IO流操作,一般說的是[記憶體]與[磁碟]之間的輸入輸出。 作用 持久化數據,保證數據不再 ...
  • C#.NET與JAVA互通之MD5哈希V2024 配套視頻: 要點: 1.計算MD5時,SDK自帶的計算哈希(ComputeHash)方法,輸入輸出參數都是byte數組。就涉及到字元串轉byte數組轉換時,編碼選擇的問題。 2.輸入參數,字元串轉byte數組時,編碼雙方要統一,一般為:UTF-8。 ...
  • CodeWF.EventBus,一款靈活的事件匯流排庫,實現模塊間解耦通信。支持多種.NET項目類型,如WPF、WinForms、ASP.NET Core等。採用簡潔設計,輕鬆實現事件的發佈與訂閱。通過有序的消息處理,確保事件得到妥善處理。簡化您的代碼,提升系統可維護性。 ...
  • 一、基本的.NET框架概念 .NET框架是一個由微軟開發的軟體開發平臺,它提供了一個運行時環境(CLR - Common Language Runtime)和一套豐富的類庫(FCL - Framework Class Library)。CLR負責管理代碼的執行,而FCL則提供了大量預先編寫好的代碼, ...
  • 本章將和大家分享在ASP.NET Core中如何使用高級客戶端NEST來操作我們的Elasticsearch。 NEST是一個高級別的Elasticsearch .NET客戶端,它仍然非常接近原始Elasticsearch API的映射。所有的請求和響應都是通過類型來暴露的,這使得它非常適合快速上手 ...
  • 參考delphi的代碼更改為C# Delphi 檢測密碼強度 規則(仿 google) 仿 google 評分規則 一、密碼長度: 5 分: 小於等於 4 個字元 10 分: 5 到 7 字元 25 分: 大於等於 8 個字元 二、字母: 0 分: 沒有字母 10 分: 全都是小(大)寫字母 20 ...