為什么要用 ORM??0?2 和 JDBC 有何不一樣?

為什么要用 ORM??0?2 和 JDBC 有何不一樣?

orm是一種思想,就是把object轉(zhuǎn)變成數(shù)據(jù)庫(kù)中的記錄,或者把數(shù)據(jù)庫(kù)中的記錄轉(zhuǎn)變成objecdt,我們可以用jdbc來實(shí)現(xiàn)這種思想,其實(shí),如果我們的項(xiàng)目是嚴(yán)格按照oop方式編寫的話,我們的jdbc程序不管是有意還是無意,就已經(jīng)在實(shí)現(xiàn)orm的工作了。 現(xiàn)在有許多orm工具,它們底層調(diào)用jdbc來實(shí)現(xiàn)了orm工作,我們直接使用這些工具,就省去了直接使用jdbc的繁瑣細(xì)節(jié),提高了開發(fā)效率,現(xiàn)在用的較多的orm工具是hibernate。

orm是什么意思

orm是object relational mapping的簡(jiǎn)稱,對(duì)象關(guān)系映射它的出現(xiàn)是為了解決對(duì)象和關(guān)系型數(shù)據(jù)庫(kù)不匹配的技術(shù)。

orm是使用描述對(duì)象和關(guān)系數(shù)據(jù)庫(kù)之間映射的元數(shù)據(jù),將java中的對(duì)象自動(dòng)持久化到數(shù)據(jù)庫(kù)中。

orm是隨著面向?qū)ο蟮能浖_發(fā)方法發(fā)展而產(chǎn)生的。

先進(jìn)面向?qū)ο笫侵髁鞯能浖_發(fā)方法,而關(guān)系型數(shù)據(jù)庫(kù)也是主流的數(shù)據(jù)存儲(chǔ)數(shù)據(jù)庫(kù),但是面向?qū)ο蟮木幊淘趦?nèi)存對(duì)象之間存在關(guān)聯(lián)和繼承關(guān)系。
而在數(shù)據(jù)庫(kù)中的數(shù)據(jù)無法直接表達(dá)多對(duì)多的關(guān)聯(lián)和繼承的關(guān)系所以orm一般充當(dāng)?shù)氖侵虚g件,主要實(shí)現(xiàn)程序?qū)ο蟮疥P(guān)系數(shù)據(jù)庫(kù)的映射。目前來說實(shí)現(xiàn)orm的產(chǎn)品比較流行的是:Apache ojb開源。Oracle topLink商業(yè)。

hibernate開源。Cayenne開源。iBatis開源。

hibernate逐漸成為orm的主導(dǎo),甚至有可能代替ejb出現(xiàn)。

概念:
對(duì)象關(guān)系映射,是隨著面向?qū)ο蟮能浖_發(fā)方法發(fā)展而產(chǎn)生的。面向?qū)ο蟮拈_發(fā)方法是當(dāng)今企業(yè)級(jí)應(yīng)用開發(fā)環(huán)境中的主流開發(fā)方法,關(guān)系數(shù)據(jù)庫(kù)是企業(yè)級(jí)應(yīng)用環(huán)境中**存放數(shù)據(jù)的主流數(shù)據(jù)存儲(chǔ)系統(tǒng)。

對(duì)象和關(guān)系數(shù)據(jù)是業(yè)務(wù)實(shí)體的兩種表現(xiàn)形式,業(yè)務(wù)實(shí)體在內(nèi)存中表現(xiàn)為對(duì)象,在數(shù)據(jù)庫(kù)中表現(xiàn)為關(guān)系數(shù)據(jù)。內(nèi)存中的對(duì)象之間存在關(guān)聯(lián)和繼承關(guān)系,而在數(shù)據(jù)庫(kù)中,關(guān)系數(shù)據(jù)無法直接表達(dá)多對(duì)多關(guān)聯(lián)和繼承關(guān)系。因此,對(duì)象關(guān)系映射(ORM)系統(tǒng)一般以中間件的形式存在,主要實(shí)現(xiàn)程序?qū)ο蟮疥P(guān)系數(shù)據(jù)庫(kù)數(shù)據(jù)的映射。

ORM是什么

對(duì)象關(guān)系映射(英語:Object Relational Mapping,簡(jiǎn)稱ORM,或O/RM,或O/R mapping)
對(duì)象關(guān)系映射,是一種程序設(shè)計(jì)技術(shù),用于實(shí)現(xiàn)面向?qū)ο缶幊陶Z言里不同類型系統(tǒng)的數(shù)據(jù)之間的轉(zhuǎn)換。
從效果上說,它其實(shí)是創(chuàng)建了一個(gè)可在編程語言里使用的“虛擬對(duì)象數(shù)據(jù)庫(kù)”。

如今已有很多免費(fèi)和付費(fèi)的ORM產(chǎn)品,而有些程序員更傾向于創(chuàng)建自己的ORM工具。

ORM相當(dāng)于中繼數(shù)據(jù),對(duì)象關(guān)系映射成功運(yùn)用在不同的面向?qū)ο蟪志脤赢a(chǎn)品中。

ORM框架
常見的ORM框架有:Hibernate、iBatis 等。Hibernate的O/R Mapping實(shí)現(xiàn)了POJO 和數(shù)據(jù)庫(kù)表之間的映射,以及SQL的自動(dòng)生成和執(zhí)行。
Mybatis:主要著力點(diǎn)在于?POJO 與 SQL?之間的映射關(guān)系。

然后通過映射配置文件,將SQL所需的參數(shù),以及返回的結(jié)果字段映射到指定 POJO 。
相對(duì)Hibernate“O/R”而言,Mybatis 是一種“Sql Mapping”的ORM實(shí)現(xiàn)。

什么是ORM?

ORM是對(duì)象關(guān)系映射(英語:(Object Relational Mapping,簡(jiǎn)稱ORM,或O/RM,或O/R mapping),是一種程序技術(shù),用于實(shí)現(xiàn)面向?qū)ο缶幊陶Z言里不同類型系統(tǒng)的數(shù)據(jù)之間的轉(zhuǎn)換。從效果上說,它其實(shí)是創(chuàng)建了一個(gè)可在編程語言里使用的–“虛擬對(duì)象數(shù)據(jù)庫(kù)”。

(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的由來:面向?qū)ο笫菑能浖こ袒驹瓌t(如耦合、聚合、封裝)的基礎(chǔ)上發(fā)展起來的,而關(guān)系數(shù)據(jù)庫(kù)則是從數(shù)學(xué)理論發(fā)展而來的,兩套理論存在顯著的區(qū)別。

為了解決這個(gè)不匹配的現(xiàn)象,對(duì)象關(guān)系映射技術(shù)應(yīng)運(yùn)而生。

怎么解釋ORM

ORM—對(duì)象關(guān)系映射模型,是Hibernate的核心模型。它指的是在單個(gè)組件內(nèi)負(fù)責(zé)所有實(shí)體域?qū)ο蟮某志没庋b數(shù)據(jù)訪問的細(xì)節(jié)。

簡(jiǎn)單的說是實(shí)現(xiàn)三層模式中業(yè)務(wù)邏輯與數(shù)據(jù)訪問的分離。

一般的,對(duì)數(shù)據(jù)庫(kù)的操作是通過JDBC實(shí)現(xiàn)的:舉例看下:public void delete(Object o) { Connection con = null; PreparedStatement stmt = null; try{ con = getConnection(); if(o.getID != null ){ stmt = con.preparedStatement(\”DELETE FROM user where\” +\”id=\”\”123456\”); stmt.setID(0,o.getId()); stmt.executeUpdate(); con.commit();} catch(Exception e) { e.printStackTrace(); } }}我們可以從上面的代碼中發(fā)現(xiàn),數(shù)據(jù)訪問語句(SQL)與業(yè)務(wù)邏輯處理混在一起了。有經(jīng)驗(yàn)的人會(huì)知道,這樣對(duì)開發(fā)維護(hù)都造成很大影響??墒?,有人會(huì)說,將那些數(shù)據(jù)訪問的代碼封裝在一個(gè)類中,提供API不就可以解決問題了。但是問題不是那么簡(jiǎn)單,盡管將那些訪問操作的實(shí)現(xiàn)都封裝在一起了,但是同意會(huì)遇到一些問題,封裝類中會(huì)充滿很多相類似的方法,比如CURD等操作都需要查詢,每個(gè)方法都要寫入查詢的語句會(huì)使得程序看起來相當(dāng)臃腫。

而且主要問題還是沒有得到很好的解決――――持久化層的同時(shí)又與關(guān)系模型和域模型耦合了,而且咋看之下還顯得缺乏彈性。