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
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...