ORM mybits mybits-plus

ORM

ORM 即對象關系映射(Object Relational Mapping),是一種程序設計技術,用于實現面向對象編程語言里不同類型系統的數據之間的轉換。下面從基本概念、工作原理、優勢與劣勢、常見的 ORM 框架等方面詳細介紹 ORM。

常見的orm框架有:Mybatis-plus(ibatis)、Hibernate、Jpa。

基本概念

在軟件開發中,面向對象編程(OOP)使用對象來表示數據和處理邏輯,而關系型數據庫(RDBMS)則使用表、行和列來存儲數據。這兩種模型在數據表示和操作方式上存在差異,ORM 就是為了解決這種差異而出現的技術。它將數據庫中的表映射為對象,表中的行映射為對象的實例,列映射為對象的屬性,從而讓開發者可以使用面向對象的方式來操作數據庫,而無需編寫復雜的 SQL 語句。

工作原理

ORM 框架的核心工作流程如下:

  1. 映射配置:開發者需要定義對象和數據庫表之間的映射關系。這可以通過注解、XML 配置文件等方式來實現。例如,在 Java 中使用 Hibernate 框架時,可以使用?@Entity@Table@Column?等注解來指定對象和表的映射關系。
  2. 對象操作:開發者使用面向對象的方式對對象進行創建、讀取、更新和刪除(CRUD)操作。例如,創建一個對象實例并設置其屬性值,然后調用 ORM 框架提供的方法將對象保存到數據庫中。
  3. SQL 生成:ORM 框架根據對象的操作和映射配置,自動生成相應的 SQL 語句。例如,當調用保存對象的方法時,ORM 框架會生成?INSERT?語句;當調用查詢對象的方法時,會生成?SELECT?語句。
  4. 數據庫交互:ORM 框架將生成的 SQL 語句發送到數據庫執行,并將數據庫返回的結果集轉換為對象實例。例如,將查詢結果集中的每一行數據轉換為一個對象實例,并將列值賦給對象的屬性。

優勢

  • 提高開發效率:開發者可以使用面向對象的方式操作數據庫,避免編寫大量的 SQL 語句,減少了開發時間和工作量。
  • 降低代碼耦合度:將數據庫操作封裝在 ORM 框架中,使業務邏輯和數據庫操作分離,提高了代碼的可維護性和可測試性。
  • 支持跨數據庫:ORM 框架可以屏蔽不同數據庫之間的差異,開發者可以在不修改業務代碼的情況下切換數據庫。

劣勢

  • 性能開銷:ORM 框架需要進行對象和數據庫之間的映射和轉換,會帶來一定的性能開銷。在處理大量數據或復雜查詢時,性能可能不如原生 SQL。
  • 學習成本:使用 ORM 框架需要學習框架的使用方法和配置規則,對于初學者來說可能有一定的學習成本。
  • 復雜查詢受限:對于一些復雜的 SQL 查詢,ORM 框架可能無法直接支持,需要編寫原生 SQL 語句。

常見的 ORM 框架

  • Java 中的 Hibernate:是一個廣泛使用的 Java ORM 框架,功能強大,支持多種數據庫,提供了豐富的映射配置和查詢功能。
  • Java 中的 MyBatis:是一個輕量級的 Java ORM 框架,它允許開發者靈活地編寫 SQL 語句,同時也提供了對象映射功能。
  • Python 中的 SQLAlchemy:是一個流行的 Python ORM 框架,支持多種數據庫,提供了高級的查詢和事務管理功能。
  • .NET 中的 Entity Framework:是微軟官方提供的 .NET ORM 框架,與 .NET 平臺緊密集成,支持多種數據庫。

實現面向對象編程語言里,不同類型系統的數據之間轉換

Java ??????????數據庫

Integer ?????Integer

String? ? ? ? ?varchar

ORM的優點:

最大的優勢隱藏了數據訪問細節,“封閉”的通用數據庫交互,ORM的核心。他使得我們的通用數據庫交互變得簡單易行,并且完全不用考慮該死的SQL語句。快速開發,由此而來。

ORM的缺點:

?1,性能較低。無可避免的,自動化意味著映射和關聯管理,代價是犧牲性能(早期,這是所有不喜歡ORM人的共同點)。現在的各種ORM框架都在嘗試使用各種方法來減輕這塊(LazyLoad,Cache),效果還是很顯著的。

?2,對多表查詢力不從心。

JDBC(Java Database Connectivity)

概念

JDBC 是 Java 編程語言用于與數據庫進行交互的標準 API,它為 Java 開發人員提供了一種統一的方式來訪問各種不同類型的數據庫,如 MySQL、Oracle、SQL Server 等。通過 JDBC,開發者可以執行 SQL 語句,實現對數據庫的增刪改查操作。

工作原理

  1. 加載數據庫驅動:不同的數據庫有不同的 JDBC 驅動程序,需要使用?Class.forName()?方法加載相應的驅動類。
  2. 建立數據庫連接:使用?DriverManager.getConnection()?方法,傳入數據庫的 URL、用戶名和密碼,建立與數據庫的連接。
  3. 創建 Statement 對象:通過連接對象創建?StatementPreparedStatement?或?CallableStatement?對象,用于執行 SQL 語句。
  4. 執行 SQL 語句:使用?Statement?對象的?executeQuery()executeUpdate()?等方法執行 SQL 語句。
  5. 處理結果集:如果執行的是查詢語句,會返回一個?ResultSet?對象,通過該對象可以遍歷查詢結果。
  6. 關閉資源:使用完數據庫連接、Statement?對象和?ResultSet?對象后,需要關閉它們,以釋放資源。

缺點:

  1. 編碼繁瑣,效率低(指的是編碼效率低,重復代碼多)。
  2. 數據庫連接的創建和釋放比較重復,也造成了系統資源的浪費
  3. 大量硬編碼,缺乏靈活性,不利于后期維護
  4. 參數的賦值和數據的封裝全是手動進行
try?{//加載數據庫驅動Class.forName("com.mysql.jdbc.Driver");//通過驅動管理類獲取數據庫鏈接Connection connection =     DriverManager.getConnection("jdbc:mysql://localhost:3306/test", "root", "123");//定義sql語句?表示占位符String sql = "select * from t_book where author = ?";//獲取預處理statementPreparedStatement ?preparedStatement = connection.prepareStatement(sql);//設置參數,第一個參數為sql語句中參數的序號(從1開始),第二個參數為設置的參數值preparedStatement.setString(1, "張三");//向數據庫發出sql執行查詢,查詢出結果集ResultSet??resultSet = ?preparedStatement.executeQuery();//遍歷查詢結果集bookList = new ArrayList<>();while(resultSet.next()){Book book=new Book();book.setId(resultSet.getInt("id"));book.setName(resultSet.getString("bname"));book.setAuthor(resultSet.getString("author"));book.setPrice(resultSet.getDouble("price"));bookList.add(book);}} catch (Exception e) {}finally{//釋放資源resultSet.close();preparedStatement.close();connection.close(); ???}

第一類:著重對JDBC進行API層的抽取和封裝,以及功能的增強,

典型代表是Apache的DbUtils。

第二類:借鑒面向對象的思想,讓程序員以操作對象的方式操作數據庫,無需編寫sql語句,典型代表是ORM(mybits )。

JDBC有四個核心對象:
(1)DriverManager,用于注冊數據庫連接
(2)Connection,與數據庫連接對象
(3)Statement/PrepareStatement,操作數據庫SQL語句的對象
(4)ResultSet,結果集或一張虛擬表

Mybatis

?集成第三方分頁插件(如 PageHelper)

待完善

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/899990.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/899990.shtml
英文地址,請注明出處:http://en.pswp.cn/news/899990.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

網絡編程—網絡概念

目錄 1 網絡分類 1.1 局域網 1.2 廣域網 2 常見網絡概念 2.1 交換機 2.2 路由器 2.3 集線器 2.4 IP地址 2.5 端口號 2.6 協議 3 網絡協議模型 3.1 OSI七層模型 3.2 TCP/IP五層模型 3.3 每層中常見的協議和作用 3.3.1 應用層 3.3.2 傳輸層 3.3.3 網絡層 3.3.4…

4月3日工作日志

一個樸實無華的目錄 今日學習內容&#xff1a;1.關系數據庫 今日學習內容&#xff1a; 1.關系數據庫

git commit Message 插件解釋說明

- feat - 一項新功能 - fix - 一個錯誤修復 - docs - 僅文檔更改 - style - 不影響代碼含義的更改&#xff08;空白、格式化、缺少分號等&#xff09; - refactor - 既不修復錯誤也不添加功能的代碼更改 - perf - 提高性能的代碼更改 - build - 影響構建系統或外部依賴項…

ngx_open_file

定義在 src\os\unix\ngx_files.h #define ngx_open_file(name, mode, create, access) \open((const char *) name, mode|create, access) name&#xff1a;文件名&#xff08;通常是一個字符串&#xff09;。mode&#xff1a;文件打開模式&#x…

23種設計模式-行為型模式-責任鏈

文章目錄 簡介問題解決代碼核心改進點&#xff1a; 總結 簡介 責任鏈是一種行為設計模式&#xff0c;允許你把請求沿著處理者鏈進行發送。收到請求后&#xff0c;每個處理者均可對請求進行處理&#xff0c;或將其傳遞給鏈上的下個處理者。 問題 假如你正在開發一個訂單系統。…

注意力機制在大語言模型中的原理與實現總結

注意力機制在大語言模型中的原理與實現總結 1. 章節介紹 在大語言模型的學習中&#xff0c;理解注意力機制至關重要。本章節旨在深入剖析注意力機制的原理及其在大語言模型中的應用&#xff0c;為構建和優化大語言模型提供理論與實踐基礎。通過回顧神經網絡基礎及傳統架構的局…

kafka消息可靠性傳輸語義

Kafka提供了多種消息傳遞語義&#xff0c;以適應不同的業務需求和可靠性要求。以下是Kafka消息傳輸的可靠性語義及其實現機制&#xff1a; 1. At Most Once&#xff08;至多一次&#xff09; 語義&#xff1a;消息可能會丟失&#xff0c;但不會被重復傳遞。 實現機制&#xf…

NLP高頻面試題(三十三)——Vision Transformer(ViT)模型架構介紹

Transformer架構在自然語言處理領域取得了顯著成功&#xff0c;激發了研究人員將其應用于計算機視覺任務的興趣。Vision Transformer&#xff08;ViT&#xff09;應運而生&#xff0c;成為圖像分類等視覺任務中的新興架構。本文將介紹ViT的基本架構、工作原理&#xff0c;并與傳…

Oracle數據庫數據編程SQL<3.6 PL/SQL 包(Package)>

包是Oracle數據庫中一種重要的PL/SQL程序結構,它將邏輯相關的變量、常量、游標、異常、過程和函數組織在一起,提供了更好的封裝性和模塊化。在大型項目中,可能有很多模塊,而每一個模塊又有自己的存過、函數等。而這些存過、函數默認是放在一起的,如果所有的存過函數都是放…

機器學習 分類算法

【實驗名稱】 實驗&#xff1a;分類算法 【實驗目的】 1.了解分類算法理論基礎 2.平臺實現算法 3. 編程實現分類算法 【實驗原理】 分類(Categorization or Classification)就是按照某種標準給對象貼標簽(label),再根據標簽來區分歸類。 【實驗環境】 OS&#xff1a;Ubuntu16.0…

HTML5 Canvas繪畫板項目實戰:打造一個功能豐富的在線畫板

HTML5 Canvas繪畫板項目實戰&#xff1a;打造一個功能豐富的在線畫板 這里寫目錄標題 HTML5 Canvas繪畫板項目實戰&#xff1a;打造一個功能豐富的在線畫板項目介紹技術棧核心功能實現1. 畫板初始化與工具管理2. 多樣化繪畫工具3. 事件處理機制 技術要點分析1. Canvas上下文優化…

【YOLOv8】YOLOv8改進系列(12)----替換主干網絡之StarNet

主頁&#xff1a;HABUO&#x1f341;主頁&#xff1a;HABUO &#x1f341;YOLOv8入門改進專欄&#x1f341; &#x1f341;如果再也不能見到你&#xff0c;祝你早安&#xff0c;午安&#xff0c;晚安&#x1f341; 【YOLOv8改進系列】&#xff1a; YOLOv8結構解讀 YOLOv8…

1Panel 面板 寶塔面板 Ubuntu 24.04

1Panel 面板 寶塔面板 Ubuntu 24.04 https://1panel.cn/ 1Panel 是一款開源的 Linux 服務器運維管理面板&#xff0c;它就像是給服務器配上了一個智能管家&#xff0c;讓我們能通過 Web 端輕松管理服務器。以往我們管理 Linux 服務器&#xff0c;常常需要在命令行中輸入各種復…

Node.js全局生效的中間件

目錄 1. 目錄結構 2. 代碼實現 2.1 安裝Express 2.2 app.js - 主文件 2.3 globalMiddleware.js - 全局中間件 3. 程序運行結果 4. 總結 在Node.js的Express框架中&#xff0c;全局生效的中間件是指應用程序啟動后&#xff0c;對所有請求都有效的中間件。它通常用于日志記…

WiFi(無線局域網)技術的多種工作模式

WiFi&#xff08;無線局域網&#xff09;技術支持多種工作模式&#xff0c;以滿足不同的網絡需求和應用場景。以下是主要的WiFi工作模式及其詳細說明&#xff1a; 1. 基礎設施模式&#xff08;Infrastructure Mode&#xff09; [無線接入點 (AP)]/ | \ [客戶端…

PHP 8.x:現代Web開發的性能與效率革命

隨著PHP 8.x系列的持續演進&#xff0c;這門誕生于1995年的“古老”語言正煥發新生。通過引入革命性的JIT編譯器、類型系統增強及一系列現代化語法特性&#xff0c;PHP 8.x不僅鞏固了其在Web開發領域的統治地位&#xff0c;更將性能與開發者體驗推向新高度。 一、JIT編譯器&am…

【扣子agent入門】搭建計算熱量工作流

一、食物熱量知識庫 1. 創建知識庫 工作空間——資源庫——創建資源>知識庫 2. 自動采集網頁數據 文本格式>在線數據 自動采集 找一個食物熱量網站進行采集。 一定要讓知識按條數分段&#xff0c;不然不好查詢。 二、 意圖識別節點 意圖識別&#xff08;In…

腦影像分析軟件推薦 | JuSpace

目錄 1. 軟件界面 2.工具包功能簡介 3.軟件安裝注意事項 參考文獻&#xff1a; Dukart J, Holiga S, Rullmann M, Lanzenberger R, Hawkins PCT, Mehta MA, Hesse S, Barthel H, Sabri O, Jech R, Eickhoff SB. JuSpace: A tool for spatial correlation analyses of magne…

微信小程序喚起app

1、前提 1、app與小程序主體需一致&#xff0c;可以前往微信公眾平臺關聯。 2、小程序的場景值為1069&#xff0c;也就是得從app打開小程序&#xff0c;小程序才能喚起app。 2、vue3代碼示例 <template><view class"maxBox bgc"><button open-typ…

jarvisoj API調用 [JSON格式變XXE]

http://web.jarvisoj.com:9882/ 題目要求&#xff1a;請設法獲得目標機器 /home/ctf/flag.txt 中的flag值 抓包得到&#xff1a; POST /api/v1.0/try HTTP/1.1 Host: web.jarvisoj.com:9882 Content-Length: 36 Accept-Language: zh-CN,zh;q0.9 User-Agent: Mozilla/5.0 (W…