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
  • 示例項目結構 在 Visual Studio 中創建一個 WinForms 應用程式後,項目結構如下所示: MyWinFormsApp/ │ ├───Properties/ │ └───Settings.settings │ ├───bin/ │ ├───Debug/ │ └───Release/ ...
  • [STAThread] 特性用於需要與 COM 組件交互的應用程式,尤其是依賴單線程模型(如 Windows Forms 應用程式)的組件。在 STA 模式下,線程擁有自己的消息迴圈,這對於處理用戶界面和某些 COM 組件是必要的。 [STAThread] static void Main(stri ...
  • 在WinForm中使用全局異常捕獲處理 在WinForm應用程式中,全局異常捕獲是確保程式穩定性的關鍵。通過在Program類的Main方法中設置全局異常處理,可以有效地捕獲並處理未預見的異常,從而避免程式崩潰。 註冊全局異常事件 [STAThread] static void Main() { / ...
  • 前言 給大家推薦一款開源的 Winform 控制項庫,可以幫助我們開發更加美觀、漂亮的 WinForm 界面。 項目介紹 SunnyUI.NET 是一個基於 .NET Framework 4.0+、.NET 6、.NET 7 和 .NET 8 的 WinForm 開源控制項庫,同時也提供了工具類庫、擴展 ...
  • 說明 該文章是屬於OverallAuth2.0系列文章,每周更新一篇該系列文章(從0到1完成系統開發)。 該系統文章,我會儘量說的非常詳細,做到不管新手、老手都能看懂。 說明:OverallAuth2.0 是一個簡單、易懂、功能強大的許可權+可視化流程管理系統。 有興趣的朋友,請關註我吧(*^▽^*) ...
  • 一、下載安裝 1.下載git 必須先下載並安裝git,再TortoiseGit下載安裝 git安裝參考教程:https://blog.csdn.net/mukes/article/details/115693833 2.TortoiseGit下載與安裝 TortoiseGit,Git客戶端,32/6 ...
  • 前言 在項目開發過程中,理解數據結構和演算法如同掌握蓋房子的秘訣。演算法不僅能幫助我們編寫高效、優質的代碼,還能解決項目中遇到的各種難題。 給大家推薦一個支持C#的開源免費、新手友好的數據結構與演算法入門教程:Hello演算法。 項目介紹 《Hello Algo》是一本開源免費、新手友好的數據結構與演算法入門 ...
  • 1.生成單個Proto.bat內容 @rem Copyright 2016, Google Inc. @rem All rights reserved. @rem @rem Redistribution and use in source and binary forms, with or with ...
  • 一:背景 1. 講故事 前段時間有位朋友找到我,說他的窗體程式在客戶這邊出現了卡死,讓我幫忙看下怎麼回事?dump也生成了,既然有dump了那就上 windbg 分析吧。 二:WinDbg 分析 1. 為什麼會卡死 窗體程式的卡死,入口門檻很低,後續往下分析就不一定了,不管怎麼說先用 !clrsta ...
  • 前言 人工智慧時代,人臉識別技術已成為安全驗證、身份識別和用戶交互的關鍵工具。 給大家推薦一款.NET 開源提供了強大的人臉識別 API,工具不僅易於集成,還具備高效處理能力。 本文將介紹一款如何利用這些API,為我們的項目添加智能識別的亮點。 項目介紹 GitHub 上擁有 1.2k 星標的 C# ...