當前位置:首頁 » 數據倉庫 » orm能不能直接訪問底層資料庫
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

orm能不能直接訪問底層資料庫

發布時間: 2022-10-16 16:21:38

❶ Hibernate框架ORM的實現原理

東方標准國際軟體專業講師,曾經負責過的重大的大型項目包括:全軍武器裝備

質量管理系統、全軍辦公自動化系統、日本NTT電信管理系統等。主要著作包括

《ASP.NET開發答疑200問》《ASP.NET開發實例導航》等。畢業於北京大學計算

機專業。

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文件格式我簡單做下介紹

,比如tom這句就是一個XML格式的描述,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類,通過這兩個類的方法我們就可以獲取資料庫表的欄位名

、類型、大小等相關信息。

❷ hibernate 中的ORM是如何與資料庫實現存儲和查詢的

通過映射文件確定實體類與資料庫表之間的映射關系,大部分情況下一個實體類對應一張表,實體類屬性對應資料庫中表的欄位;另外,通過配置文件確定與資料庫相關的參數,如:資料庫具體版本、JDBC驅動、資料庫連接URL、用戶名、密碼等。Hibernate會根據映射文件、配置文件以及用戶的操作,將應用層的邏輯行為最終轉化成sql語句提交給資料庫伺服器執行。Hibernate簡化了開發過程拼SQL、構建實體對象的過程;同時,Hibernate屏蔽的底層資料庫之間SQL的差異,當需要轉成異構的資料庫時,只要簡單的修改下配置文件指定新的資料庫類型即可,無需修改具體的SQL。

❸ 什麼是orm框架

ORM(ObjectRelationalMapping)框架採用元數據來描述對象一關系映射細節,元數據一般採用XML格式,並且存放在專門的對象一映射文件中。

基本內容
ORM框架採用元數據來描述對象一關系映射細節,元數據一般採用XML格式,並且存放在專門的對象一映射文件中。只要提供了持久化類與表的映射關系,ORM框架在運行時就能參照映射文件的信息,把對象持久化到資料庫中。當前ORM框架主要有三種:Hibernate,iBATIS,EclipseLink。

❹ 什麼是ORM

ORM是對象關系映射(英語:(Object Relational Mapping,簡稱ORM,或O/RM,或O/R mapping),是一種程序技術,用於實現面向對象編程語言里不同類型系統的數據之間的轉換。從效果上說,它其實是創建了一個可在編程語言里使用的--「虛擬對象資料庫」。

(ORM is Object Relational Mapping (ORM, or O/RM, or O/R Mapping), a programming technique used to transform data between different types of systems in an object-oriented programming language. In effect, it creates a "virtual object database" that can be used in a programming language.)

拓展資料

ORM的由來:面向對象是從軟體工程基本原則(如耦合、聚合、封裝)的基礎上發展起來的,而關系資料庫則是從數學理論發展而來的,兩套理論存在顯著的區別。為了解決這個不匹配的現象,對象關系映射技術應運而生。

❺ mybatis算是orm框架嗎,可以更換底層資料庫嗎

mybatis的主要特使是sqlMap,也可以當作orm來使用,不過sql得自己寫。至於你說的更換資料庫,只要你的SQL寫得夠通用,把底層的數據源替換掉就可以了。
就算是orm的hibernate的hql語句,如果沒有注意各個資料庫的不同點,寫的不好,有的hql也一樣不能通用的

❻ ORM框架是什麼

orm
-
即object/relation
mapping
詳細說明參見:http://ke..com/view/197951.htm
大概地說,這類框架的是為了將類對象和關系建立映射,在應用程序和資料庫的io之間建立一個中間層,在程序中只需要直接操作對象(資料庫中對象的增刪改查),而不用去關心資料庫中表的列啊,關系啊什麼的
舉個例子:
以前一直自己一個人在家吃飯,需要自己去買米買菜,然後自己再做,做完了還得收拾,覺得好麻煩,但是也得做,沒辦法啊,苦逼的單身-
-
這也就相當於傳統的操作關系(未使用orm);
而終於有一天,發現去飯館吃飯很方便,不用操心買菜啊什麼的,也不用操心吃完還得去收拾一大堆什麼的,點好菜,吃好付錢走人就行了
-
什麼做飯燒菜的事兒都有別人去做好,具體人家怎麼做,就不用管了
-
-
這飯館就相當於是一個orm的映射框架,為你處理那些煩瑣的無聊的事,只把最重要的環節--吃飯--讓你來做
而點菜就相當於你在做orm映射的配置,你告訴飯館你要吃點啥,飯館就根據你的需要去配菜准備,做好了就給你送上來!

❼ mybatis算是orm框架嗎,可以更換底層資料庫嗎

1、定義
mybatis是一個支持普通sql查詢,存儲過程和高級映射的優秀持久層框架。
2、使用原因
mybatis消除了幾乎所有的jdbc代碼和參數的手工設置以及對結果集的檢索封裝。mybatis可以使用簡單的xml或註解用於配置和原始映射

❽ ORM  和 JDBC 有何不一樣

ORM:是對象關系模型,如hibernate,讓你以面向對象的方式去編程。封裝了JDBC.
JDBC:是從底層訪問資料庫伺服器。一般銀行,金融行業為了安全起見,直接用JDBC訪問。

❾ 有誰能通俗點的給我講解下ORM是什麼嗎網上查的一大把專業理論名詞。看了一頭霧水。有誰能通俗點將嗎

我用c#的說法給你解釋一下:

在ORM出現之前,.NET語言對資料庫操作都是使用ADO.NET

就是手動打開關閉SqlConnection ,然後手動拼接SQL語句,如:

select*fromstudent;

直接使用SQL語句雖然能帶來極大的性能體驗,但是也會有很多問題:

  1. SQL語句的錯誤不好檢查(因為SQL語句全是字元串,無法做語法檢查)

  2. 接收到的數據全是弱類型,如果你想要使用基本都要做類型轉換


ORM就是用本地的model代替資料庫裡面的各種表,你直接通過操作dbContext就可以獲得資料庫中的數據,然後它還使用一些技術把ADO.NET中一些麻煩的事給解決了

在EF中使用LINQ來編寫資料庫操作語法,ORM會自己將LINQ語句翻譯為對應的SQL語句,然後將返回的數據自動做類型轉換生成對應的model,就像這樣:

varstudentList=dbContext.Student.ToList();

使用ORM後既有語法檢查,又省略了很多以前繁瑣的操作,可以讓開發人員將更多的注意力集中到業務的處理上,提高他們的效率

同時一些好的ORM還會有緩存處理、合並執行SQL等其它功能;它絕對是現代中小型系統的開發必備

❿ 開發ERP 不直接連接資料庫 還可以怎麼連接

資料庫的應用,肯定是要連接資料庫的,如果說出於安全考慮,可以分幾個層面:
1,代碼層面,可以通過orm框架技術來做,這個要根據你的技術平台來採用對應的orm框架技術,本質上來說,它還是直接連接了資料庫,只是對開發過程來說,顯得沒有和資料庫直接打交道而已, 它本身並不保證安全,只是中間層的封裝,除非看配置文件,否則也不知道資料庫是什麼資料庫而已。分層結構的代碼原理也是類似orm,獨立出資料庫訪問操作,但也只是業務層不直接訪問資料庫而已,對安全性上,於orm一樣,沒有實質性的保證。
2,架構層面,你的應用代碼,並不直接把數據提交到資料庫,而是提交給一個中間層,在傳統的C/S架構中,你的業務邏輯在C層,只是把數據提交到S層,由S層負責保存到資料庫,這樣你的業務代碼根本不知道後台有資料庫,只知道後台有個服務端,只要服務端怎麼保存數據是不用業務端考慮的,比如網路游戲,游戲只關心服務端在哪裡,而不知道服務端怎麼存資料庫。B/S架構中,如果是簡單的單伺服器,S端和資料庫在一台伺服器,安全性考慮在伺服器安全層面。就算是有獨立資料庫伺服器,原理也是一樣的。
3,網路層面,隔絕非業務訪問是你要考慮的事情,就是說除了你的代碼所在的應用伺服器,其他地址是禁止訪問它的。
你說的json,它只是格式,不是安全性手段,json在web中的應用更多,因為瀏覽器可以通過js解析,但實質上,web應用就是b/s架構,你的S端其實就是在直接訪問資料庫,如果S端的編碼沒有檢查sql注入的安全性機制,資料庫一樣是不安全的。