ORM實現原理

来源:http://www.cnblogs.com/zhangzongle/archive/2016/10/11/5947785.html
-Advertisement-
Play Games

1.什麼是ORM ORM的全稱是Object Relational Mapping,即對象關係映射。它的實現思想就是將關係資料庫中表的數據映射成為對象,以對象的形式展現,這樣開發人員就可以把對資料庫的操作轉化為對這些對象的操作。因此它的目的是為了方便開發人員以面向對象的思想來實現對資料庫的操作。 2 ...


1.什麼是ORM 
ORM的全稱是Object Relational Mapping,即對象關係映射。它的實現思想就是將關係資料庫中表的數據映射成為對象,以對象的形式展現,這樣開發人員就可以把對資料庫的操作轉化為對這些對象的操作。因此它的目的是為了方便開發人員以面向對象的思想來實現對資料庫的操作。

2.什麼是Hibernate 
對於Hibernate的稱呼有很多,比如工具、技術、框架以及解決方案等,這些都可以,重要的是大家要知道它的作用。在這裡我習慣性稱它為框架,它是一種能實現ORM的框架。能實現ORM這個功能的框架有很多,Hibernate可以說是這些框架中最流行、最受開發者關註的,甚至連JBoss公司也把它吸收進來,利用它在自己的項目中實現ORM功能。

3.ORM的實現原理 
現在在Java領域大家對Hibernate的討論很多,比如它的優缺點、如何應用、錯誤如何解決以及把它和Struts/Spring等框架相結合作為整個系統的解決方案。在這裡我想和大家探討一些更深層次的話題,那就是Hibernate是如何實現ORM的功能?如果讓我們自己開發一款實現ORM功能的框架需要怎麼做?其實這些問題就是圍繞著一個詞,那就是“映射”,如果我們知道如何實現這種映射那麼我們也能夠開發出自己的一款ORM框架。會使用Hibernate的開發人員都知道,在使用它實現ORM功能的時候,主要的文件有:映射類(*.java)、映射文件(*.hbm.xml)以及資料庫配置文件(*.properties或*.cfg.xml),它們各自的作用如下。 
⑴映射類:它的作用是描述資料庫表的結構,表中的欄位在類中被描述成屬性,將來就可以實現把表中的記錄映射成為該類的對象。 
⑵映射文件:它的作用是指定資料庫表和映射類之間的關係,包括映射類和資料庫表的對應關係、表欄位和類屬性類型的對應關係以及表欄位和類屬性名稱的對應關係等。 
⑶資料庫配置文件:它的作用是指定與資料庫連接時需要的連接信息,比如連接哪中資料庫、登錄用戶名、登錄密碼以及連接字元串等。 
在這三種主要的文件中,映射類為普通Java源文件、映射文件為XML格式、資料庫配置文件為Properties格式或者是XML格式。想理解“映射”首先我們需要知道如何解析這三種文件,即解析XML格式文件、解析Properties格式文件和解析Java類文件。

下麵我們來分別探討一下如何實現這些文件的解析。 
⑴如何解析XML文件 
前面我們說過映射文件是XML格式,資料庫配置文件也可以是XML格式,因此如果能解析XML文件我們就可以獲取這兩個文件的信息。XML文件格式我簡單做下介紹,比如<name sex=”male”>tom</name>這句就是一個XML格式的描述,name代表節點,節點必須有開始標記<name>和結束標記</name>,在開始標記中我們可以添加一些屬性的聲明比如sex。解析XML的技術可以分為兩類那就是SAX和DOM,這兩種方式的差別和優缺點大家可以上網查閱或者我們會在以後的文章中提出,請大家關註。實現解析XML文件的功能很方便,我們可以通過下載第三方的一些工具包如xml-apis.jar和xercesImpl.jar等,也可以使用JDK自帶的工具類DocumentBuilderFactory、DocumentBuilder、Document、Element等等,大家可以通過API文擋查閱這些類的說明。通過這些類我們可以把XML文件的信息讀入記憶體並通過類中的某些方法獲取指定節點的名字、值、屬性名、屬性值這些信息。 
⑵解析Properties文件 
資料庫配置文件可以是XML格式也可以是Properties格式,Properties文件一般採用“屬性名=屬性值”的形式描述信息。如果配置文件採用Properties文件描述,我們就需要想辦法解析這種類型的文件了。想解析Properties文件大家就需要熟悉Properties這個類了,這個類有一些常用方法比如,load()載入指定文件並讀取文件中的屬性信息,PropertyNames()返回所有屬性名,getProperty()返回指定屬性名的屬性值。通過解析Properties文件我們可以得到連接資料庫必要的信息,然後通過底層JDBC技術與資料庫建立連接。 
⑶解析Java類文件 
通過解析映射文件和資料庫配置文件我們可以建立資料庫的連接,可以得到映射類的名字、屬性名、資料庫表名、欄位名以及類型等信息。要把資料庫中表的數據映射成為對象,首先需要把表中的記錄取出,然後將每個欄位值給映射類對象的每個屬性,這個賦值過程要調用對象中的set方法。我們現在通過映射文件只知道類名和屬性名,如何根據類名和屬性名調用相應的set和get方法,是一個關鍵問題。在Java中有一種機制叫反射機制,使用這種機制我們可以得到類的信息,包括類只用的修飾符、方法、屬性、繼承的父類以及實現介面等信息。反射機制相關的類有Class、Field、Method以及Constructor等。通過Class的getFields()、getMethods()和getConstructors()方法得到相應的屬性、方法和構造方法。通過Field類的getName()、getType()和getModifiers()方法得到相應的屬性名、屬性類型、屬性修飾符信息。通過Method類getReturnType()可以獲取方法的返回類型,invoke()方法可以根據給定的方法名和參數值執行對象中對應的方法。我們可以首先通過以上方法獲取類中的屬性名,然後拼寫成setXXX和getXXX方法名,最後根據方法名執行對應的方法,將資料庫數據載入到對象中。 
此外要實現Hibernate機制還會涉及到一個技術點,那就是如何獲取資料庫的相關信息。要實現這個功能,就需要大家瞭解JDBC的DataBaseMetaData類和ResultSetMetaData類,通過這兩個類的方法我們就可以獲取資料庫表的欄位名、類型、大小等相關信息。 
在這裡我只是給大家把實現ORM功能的一些關鍵技術提了出來,通過上面介紹大家對ORM機制應該有個大概瞭解,比如通過解析資料庫配置文件獲取資料庫連接信息並建立連接,通過解析映射文件可以獲取映射類名、屬性名、表名以及欄位名等信息,得到名字後通過反射機制可以得到映射類信息,調用構造方法創建對象,調用每個屬性的set方法給對象設值完成數據的裝載。Hibernate就是採用這個過程來實現ORM的,當然Hibernate還使用了事務控制、緩存控制等很多技術......

轉:http://www.cnblogs.com/bendantuohai/p/4711340.html

謝!


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

-Advertisement-
Play Games
更多相關文章
  • 進程管理 進程需要一定的資源(包括CPU時間、記憶體、文件、I/O設備)以完成其任務。這些資源可以在進程創建時分配給進程,也可以在執行進程時分配給進程。除了在創建時得到各種物理和邏輯資源外,進程還可以接受傳輸過來的各種初始化數據(輸入)。 需要註意:程式本省並不是進程,程式是被動的實體,而進程是一個活 ...
  • Windows server 2016 RTM已流出,具體可以搜索wzor大神泄露的,英文版本是0911的。現根據我安裝後整理的如何配置使個人更適合使用。 一、組策略 WIN鍵+R鍵,輸入gpedit.msc,進入組策略設置。 1、電腦配置,Windows設置,安全設置,帳戶策略,密碼策略:"密碼 ...
  • 一、壓縮與解壓縮 1、compress [-rcv] 文件或目錄 <==壓縮 uncompress 文件.Z <==解壓縮 -r:可以連同目錄下的文件也同時進行壓縮 -c:將壓縮數據輸出成standard output(輸出到屏幕) -v:可以顯示出壓縮後的文件信息以及壓縮過程中的一些文件名變化 ( ...
  • 操作系統做什麼? 從不同的視角進行分析: 用戶視角 系統視角 最終定義操作系統 定義1:操作系統是為了實現管理,同時帶來了必不可少的各種類型的浪費 分析:管理硬體資源,同樣帶來的浪費有:記憶體消耗,硬體消耗等。 定義2:操作系統是管理電腦硬體的程式,它還為應用程式提供基礎,並且充當電腦硬體和電腦 ...
  • 防火牆配置(參考 "CentOS7安裝iptables防火牆" ) 檢查是否安裝 先檢查是否安裝了iptables service iptables status 安裝iptables yum install y iptables 升級iptables yum update iptables 安裝i ...
  • CLR就是公共運行時,本文就對c#編寫SQL StoredProcedures的過程進行簡單講解。 【步驟】 2. 3. 7.打開設置 8. 註意刪除方式:註意刪除Assembly時,一定要先把引用此Assembly的所有東西刪除drop proc QueryQueueSPgo drop assem ...
  • 項目相關的快捷鍵 Ctrl + Shift + B = 生成項目 Ctrl + Alt + L = 顯示Solution Explorer(解決方案資源管理器) Shift + Alt+ C = 添加新類 Shift + Alt + A = 添加新項目到項目 編輯相關的鍵盤快捷鍵 Ctrl + En ...
  • 在.net的項目開發中,經常會對XML文件進行操作,由於XML文件可以實現跨平臺傳輸,較多的應用在數據傳輸中,特總結以下幾種常用的XML操作方法: 1.創建XML文檔: 2.讀取XML文檔中的數據: 3.對XML文檔插入數據: 4.修改XML文檔中的數據: 5.刪除XML文檔中數據: 6.讀取XML ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...