• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            woaidongmao

            文章均收錄自他人博客,但不喜標(biāo)題前加-[轉(zhuǎn)貼],因其丑陋,見(jiàn)諒!~
            隨筆 - 1469, 文章 - 0, 評(píng)論 - 661, 引用 - 0
            數(shù)據(jù)加載中……

            Hibernate框架如何實(shí)現(xiàn)ORM

            1.什么是ORM

                ORM的全稱是Object Relational Mapping,即對(duì)象關(guān)系映射。它的實(shí)現(xiàn)思想就是將關(guān)系數(shù)據(jù)庫(kù)中表的數(shù)據(jù)映射成為對(duì)象,以對(duì)象的形式展現(xiàn),這樣開(kāi)發(fā)人員就可以把對(duì)數(shù)據(jù)庫(kù)的操作轉(zhuǎn)化為對(duì)這些對(duì)象的操作。因此它的目的是為了方便開(kāi)發(fā)人員以面向?qū)ο蟮乃枷雭?lái)實(shí)現(xiàn)對(duì)數(shù)據(jù)庫(kù)的操作。

                2.什么是Hibernate

                對(duì)于Hibernate的稱呼有很多,比如工具、技術(shù)、框架以及解決方案等,這些都可以,重要的是大家要知道它的作用。在這里我習(xí)慣性稱它為框架,它是一種能實(shí)現(xiàn)ORM的框架。能實(shí)現(xiàn)ORM這個(gè)功能的框架有很多,Hibernate可以說(shuō)是這些框架中最流行、最受開(kāi)發(fā)者關(guān)注的,甚至連JBoss公司也把它吸收進(jìn)來(lái),利用它在自己的項(xiàng)目中實(shí)現(xiàn)ORM功能。

                3.ORM的實(shí)現(xiàn)原理

                現(xiàn)在在Java領(lǐng)域大家對(duì)Hibernate的討論很多,比如它的優(yōu)缺點(diǎn)、如何應(yīng)用、錯(cuò)誤如何解決以及把它和Struts/Spring等框架相結(jié)合作為整個(gè)系統(tǒng)的解決方案。在這里我想和大家探討一些更深層次的話題,那就是Hibernate是如何實(shí)現(xiàn)ORM的功能?如果讓我們自己開(kāi)發(fā)一款實(shí)現(xiàn)ORM功能的框架需要怎么做?其實(shí)這些問(wèn)題就是圍繞著一個(gè)詞,那就是映射,如果我們知道如何實(shí)現(xiàn)這種映射那么我們也能夠開(kāi)發(fā)出自己的一款ORM框架。會(huì)使用Hibernate的開(kāi)發(fā)人員都知道,在使用它實(shí)現(xiàn)ORM功能的時(shí)候,主要的文件有:映射類(*.java)、映射文件(*.hbm.xml)以及數(shù)據(jù)庫(kù)配置文件(*.properties*.cfg.xml),它們各自的作用如下。

                映射類:它的作用是描述數(shù)據(jù)庫(kù)表的結(jié)構(gòu),表中的字段在類中被描述成屬性,將來(lái)就可以實(shí)現(xiàn)把表中的記錄映射成為該類的對(duì)象。

                映射文件:它的作用是指定數(shù)據(jù)庫(kù)表和映射類之間的關(guān)系,包括映射類和數(shù)據(jù)庫(kù)表的對(duì)應(yīng)關(guān)系、表字段和類屬性類型的對(duì)應(yīng)關(guān)系以及表字段和類屬性名稱的對(duì)應(yīng)關(guān)系等。

                數(shù)據(jù)庫(kù)配置文件:它的作用是指定與數(shù)據(jù)庫(kù)連接時(shí)需要的連接信息,比如連接哪中數(shù)據(jù)庫(kù)、登錄用戶名、登錄密碼以及連接字符串等。

                在這三種主要的文件中,映射類為普通Java源文件、映射文件為XML格式、數(shù)據(jù)庫(kù)配置文件為Properties格式或者是XML格式。想理解映射首先我們需要知道如何解析這三種文件,即解析XML格式文件、解析Properties格式文件和解析Java類文件。

                下面我們來(lái)分別探討一下如何實(shí)現(xiàn)這些文件的解析。

                如何解析XML文件

                前面我們說(shuō)過(guò)映射文件是XML格式,數(shù)據(jù)庫(kù)配置文件也可以是XML格式,因此如果能解析XML文件我們就可以獲取這兩個(gè)文件的信息。XML文件格式我簡(jiǎn)單做下介紹,比如<name sex=“male”>tom</name>這句就是一個(gè)XML格式的描述,name代表節(jié)點(diǎn),節(jié)點(diǎn)必須有開(kāi)始標(biāo)記<name>和結(jié)束標(biāo)記</name>,在開(kāi)始標(biāo)記中我們可以添加一些屬性的聲明比如sex.解析XML的技術(shù)可以分為兩類那就是SAXDOM,這兩種方式的差別和優(yōu)缺點(diǎn)大家可以上網(wǎng)查閱或者我們會(huì)在以后的文章中提出,請(qǐng)大家關(guān)注。

                實(shí)現(xiàn)解析XML文件的功能很方便,我們可以通過(guò)下載第三方的一些工具包如xml-apis.jarxercesImpl.jar等,也可以使用JDK自帶的工具類DocumentBuilderFactoryDocumentBuilderDocumentElement等等,大家可以通過(guò)API文擋查閱這些類的說(shuō)明。通過(guò)這些類我們可以把XML文件的信息讀入內(nèi)存并通過(guò)類中的某些方法獲取指定節(jié)點(diǎn)的名字、值、屬性名、屬性值這些信息。

                解析Properties文件

                數(shù)據(jù)庫(kù)配置文件可以是XML格式也可以是Properties格式,Properties文件一般采用屬性名=屬性值的形式描述信息。如果配置文件采用Properties文件描述,我們就需要想辦法解析這種類型的文件了。想解析Properties文件大家就需要熟悉Properties這個(gè)類了,這個(gè)類有一些常用方法比如,load()加載指定文件并讀取文件中的屬性信息,PropertyNames()返回所有屬性名,getProperty()返回指定屬性名的屬性值。通過(guò)解析Properties文件我們可以得到連接數(shù)據(jù)庫(kù)必要的信息,然后通過(guò)底層JDBC技術(shù)與數(shù)據(jù)庫(kù)建立連接。

                解析Java類文件

                通過(guò)解析映射文件和數(shù)據(jù)庫(kù)配置文件我們可以建立數(shù)據(jù)庫(kù)的連接,可以得到映射類的名字、屬性名、數(shù)據(jù)庫(kù)表名、字段名以及類型等信息。要把數(shù)據(jù)庫(kù)中表的數(shù)據(jù)映射成為對(duì)象,首先需要把表中的記錄取出,然后將每個(gè)字段值給映射類對(duì)象的每個(gè)屬性,這個(gè)賦值過(guò)程要調(diào)用對(duì)象中的set方法。我們現(xiàn)在通過(guò)映射文件只知道類名和屬性名,如何根據(jù)類名和屬性名調(diào)用相應(yīng)的setget方法,是一個(gè)關(guān)鍵問(wèn)題。

                Java中有一種機(jī)制叫反射機(jī)制,使用這種機(jī)制我們可以得到類的信息,包括類只用的修飾符、方法、屬性、繼承的父類以及實(shí)現(xiàn)接口等信息。反射機(jī)制相關(guān)的類有ClassFieldMethod以及Constructor等。通過(guò)ClassgetFields()、getMethods()和getConstructors()方法得到相應(yīng)的屬性、方法和構(gòu)造方法。通過(guò)Field類的getName()、getType()和getModifiers()方法得到相應(yīng)的屬性名、屬性類型、屬性修飾符信息。通過(guò)MethodgetReturnType()可以獲取方法的返回類型,invoke()方法可以根據(jù)給定的方法名和參數(shù)值執(zhí)行對(duì)象中對(duì)應(yīng)的方法。我們可以首先通過(guò)以上方法獲取類中的屬性名,然后拼寫(xiě)成setXXXgetXXX方法名,最后根據(jù)方法名執(zhí)行對(duì)應(yīng)的方法,將數(shù)據(jù)庫(kù)數(shù)據(jù)加載到對(duì)象中。

                此外要實(shí)現(xiàn)Hibernate機(jī)制還會(huì)涉及到一個(gè)技術(shù)點(diǎn),那就是如何獲取數(shù)據(jù)庫(kù)的相關(guān)信息。要實(shí)現(xiàn)這個(gè)功能,就需要大家了解JDBCDataBaseMetaData類和ResultSetMetaData類,通過(guò)這兩個(gè)類的方法我們就可以獲取數(shù)據(jù)庫(kù)表的字段名、類型、大小等相關(guān)信息。

                在這里我只是給大家把實(shí)現(xiàn)ORM功能的一些關(guān)鍵技術(shù)提了出來(lái),通過(guò)上面介紹大家對(duì)ORM機(jī)制應(yīng)該有個(gè)大概了解,比如通過(guò)解析數(shù)據(jù)庫(kù)配置文件獲取數(shù)據(jù)庫(kù)連接信息并建立連接,通過(guò)解析映射文件可以獲取映射類名、屬性名、表名以及字段名等信息,得到名字后通過(guò)反射機(jī)制可以得到映射類信息,調(diào)用構(gòu)造方法創(chuàng)建對(duì)象,調(diào)用每個(gè)屬性的set方法給對(duì)象設(shè)值完成數(shù)據(jù)的裝載。Hibernate就是采用這個(gè)過(guò)程來(lái)實(shí)現(xiàn)ORM的,當(dāng)然Hibernate還使用了事務(wù)控制、緩存控制等很多技術(shù) .

             

            posted on 2009-06-04 21:59 肥仔 閱讀(323) 評(píng)論(0)  編輯 收藏 引用 所屬分類: Web-后臺(tái)

            久久精品成人影院| 久久久网中文字幕| 伊人丁香狠狠色综合久久| 国产成人久久精品麻豆一区| 亚洲国产成人久久精品99 | 久久久久久国产精品无码下载| 国产成人综合久久精品红| 久久久久亚洲av无码专区导航| 久久精品国产清自在天天线| 色欲久久久天天天综合网| 狠狠人妻久久久久久综合| 亚洲va久久久噜噜噜久久狠狠 | 久久精品国产精品亚洲下载| 人妻精品久久无码专区精东影业| 国产精品免费久久| 欧美熟妇另类久久久久久不卡| 精品久久人人妻人人做精品| 久久精品人人做人人妻人人玩| 少妇久久久久久被弄到高潮 | 精品水蜜桃久久久久久久| 色欲av伊人久久大香线蕉影院| 久久亚洲国产精品123区| 久久狠狠色狠狠色综合| 亚洲精品无码久久久久久| 久久久久久无码国产精品中文字幕| 97久久超碰国产精品2021| 少妇无套内谢久久久久| 人人狠狠综合久久亚洲高清| 久久美女人爽女人爽| 久久国产亚洲高清观看| 99久久国产综合精品女同图片| 中文字幕精品久久久久人妻| 久久久受www免费人成| 精品久久久久久无码人妻蜜桃| 中文字幕一区二区三区久久网站| 国产成人精品久久二区二区| 久久久久亚洲AV成人片 | 久久久久久青草大香综合精品| 国产成人香蕉久久久久| 国产精品久久久久久久久久免费| 久久国产精品一区二区|