版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
JavaEE企業(yè)級(jí)軟件開(kāi)發(fā)Hibernate入門2014洛陽(yáng)師范學(xué)院呂延慶本節(jié)內(nèi)容提要ORM和Hibernate簡(jiǎn)介數(shù)據(jù)庫(kù)、SQL回顧與Mysql的使用MyEclipse對(duì)Hibernate開(kāi)發(fā)的支持Hibernate的配置(Hibernate.cfg.xml)Hibernate映射文件(*.hbm.xml)ORM簡(jiǎn)介對(duì)象/關(guān)系映射ORM(Object-RelationMapping)用于將對(duì)象與對(duì)象之間的關(guān)系對(duì)應(yīng)到數(shù)據(jù)庫(kù)表與表之間的關(guān)系的一種模式。簡(jiǎn)單地說(shuō),ORM是通過(guò)使用描述對(duì)象和數(shù)據(jù)庫(kù)之間映射的元數(shù)據(jù),將Java程序中的對(duì)象自動(dòng)持久化到關(guān)系數(shù)據(jù)庫(kù)中。對(duì)象和關(guān)系數(shù)據(jù)是業(yè)務(wù)實(shí)現(xiàn)的兩種表現(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ù)無(wú)法直接表達(dá)多對(duì)多關(guān)聯(lián)和繼承關(guān)系。什么是關(guān)系模型(RelationalModel)?關(guān)系模型把世界看作是由實(shí)體(Entity)和聯(lián)系(Relationship)構(gòu)成的。所謂實(shí)體就是指現(xiàn)實(shí)世界中具有區(qū)分與其它事物的特征或?qū)傩圆⑴c其它實(shí)體有聯(lián)系的對(duì)象。在關(guān)系模型中實(shí)體通常是以表的形式來(lái)表現(xiàn)的。表的每一行描述實(shí)體的一個(gè)實(shí)例,表的每一列描述實(shí)體的一個(gè)特征或?qū)傩?。所謂聯(lián)系就是指實(shí)體之間的關(guān)系,即實(shí)體之間的對(duì)應(yīng)關(guān)系。1:11:nm:n關(guān)系數(shù)據(jù)庫(kù):表、字段、主鍵、外鍵什么是面向?qū)ο螅∣bjectOriented)?面向?qū)ο笕筇卣鳎悍庋b、繼承(一般與特殊)、多態(tài)(覆蓋與重載)類、對(duì)象、屬性關(guān)系一般與特殊關(guān)系(isa):繼承(extends)、實(shí)現(xiàn)(implement)組成(hasa):成員屬性與成員方法關(guān)聯(lián)及其多重性1:11:nm:n雙向關(guān)聯(lián)與單向關(guān)聯(lián)ORM系統(tǒng)的一般構(gòu)成ORM系統(tǒng)一般以中間件的形式存在,主要實(shí)現(xiàn)程序?qū)ο蟮疥P(guān)系數(shù)據(jù)庫(kù)數(shù)據(jù)的映射。一般的ORM包括四個(gè)部分:對(duì)持久類對(duì)象進(jìn)行CRUD操作的API用來(lái)規(guī)定類和類屬性相關(guān)查詢的語(yǔ)言或API規(guī)定mappingmetadata的工具可以讓ORM實(shí)現(xiàn)同事務(wù)對(duì)象一起進(jìn)行dirtychecking、lazyassociationfetching和其他優(yōu)化操作的技術(shù)。Hibernate概述Hibernate體系結(jié)構(gòu)Hibernate是一個(gè)開(kāi)源ORM框架,一般作為模型層/數(shù)據(jù)訪問(wèn)層。它通過(guò)配置文件(hibernate.cfg.xml或perties)和映射文件(*.hbm.xml)把Java對(duì)象或持久化對(duì)象(PersistentObject,PO)映射到數(shù)據(jù)庫(kù)中的數(shù)據(jù)表,然后通過(guò)操作PO,對(duì)數(shù)據(jù)庫(kù)中的表進(jìn)行各種操作,其中PO就是POJO(普通Java對(duì)象)加映射文件。Hibernate的體系結(jié)構(gòu)如圖所示。圖Hibernate體系結(jié)構(gòu)Mysql簡(jiǎn)介Mysql是一個(gè)開(kāi)源數(shù)據(jù)庫(kù)服務(wù)器,應(yīng)用十分廣泛。數(shù)據(jù)庫(kù)核心服務(wù)圖形管理界面(不是必須):MySQLFront或Eclipse自帶的DBBrowserJDBC驅(qū)動(dòng)程序準(zhǔn)備工作:MySQL中建表createdatabasemytest;usemytest;createtablebook(idINTnotnullauto_increment,nameVARCHAR(32)notnullunique,authorVARCHAR(64),priceDOUBLEnotnull,createtimeTIMESTAMPprimarykey(id)
);上述步驟也可在MyEclipse環(huán)境中以圖形界面完成JDBC實(shí)現(xiàn)查詢//JDBC實(shí)現(xiàn)Class.forName("com.mysql.jdbc.Driver");//driverclassConnectionconn=DriverManager.getConnection("jdbc:mysql://localhost:3306/mytest","root","lysfxy");//JDBCurl,username,passwordStringsql="select*frombook";PreparedStatementpstmt=conn.prepareStatement(sql);ResultSetrs=pstmt.executeQuery();if(rs!=null){ rs.last(); System.out.println(rs.getRow());}Hibernate配置(快速入門)在MyEclipse環(huán)境中為工程添加Hibernate支持(AddHibernateCapabilities)實(shí)質(zhì)上做了兩步,即添加了Hibernate所需的jar庫(kù)文件建立Hibernate.cfg.xml配置文件為Books表建立Hibernate支持文件(HibernateReverseEngineering,反向工程)Book.javaBook.hbm.xmlBookDAO.java(非必須的)Hibernate的核心類和接口Configuration類管理Hibernate的配置信息SessionFactory接口負(fù)責(zé)創(chuàng)建Session的實(shí)例Session接口提供了持久化方法,如save,update,delete,query等。
Transaction接口在Hibernate中進(jìn)行事務(wù)操作的接口Query接口Hibernate中用于執(zhí)行HQL查詢Hibernate實(shí)現(xiàn)(數(shù)據(jù)插入)//Hibernate實(shí)現(xiàn)Configurationcfg=newConfiguration().configure();SessionFactorysf=cfg.buildSessionFactory();Sessionsession=sf.openSession();Transactiontx=session.beginTransaction();Bookb=newBook();b.setName("JavaEEProgramming");b.setAuthor("lyq");b.setPrice(18.0);b.setCreatetime(Calendar.getInstance().getTime());session.save(b);mit();session.close();sf.close();Hibernate配置技巧1:自動(dòng)創(chuàng)建表hibernate.cfg.xml的配置中加入:
<property
name="hbm2ddl.auto">update</property>
可以實(shí)現(xiàn)根據(jù)映射文件自動(dòng)建表,可能的取值有create,update,validate和create-drop。
注意,用create時(shí),每次創(chuàng)建表會(huì)把數(shù)據(jù)清空。Hibernate配置技巧2:在日志中打印SQL語(yǔ)句hibernate.cfg.xml的配置中加入:
<property
name=“show_sql">true</property>
會(huì)在日志中打印SQL語(yǔ)句,有助于理解Hibernate底層工作原理,便于調(diào)試。Hibernate實(shí)現(xiàn)(查詢)//Hibernate實(shí)現(xiàn)Configurationcfg=newConfiguration().configure();SessionFactorysf=cfg.buildSessionFactory();Sessionsession=sf.openSession();Transactiontx=session.beginTransaction();Queryquery=session.createQuery("fromBook");List<Book>list=query.list();for(Bookb:list){System.out.println("name="+b.getName());System.out.println("author="+b.getAuthor());}mit();session.close();sf.close();Hibernate的映射文件*.hbm.xml<?xmlversion="1.0"encoding="utf-8"?><!DOCTYPEhibernate-mappingPUBLIC"-//Hibernate/HibernateMappingDTD3.0//EN""/hibernate-mapping-3.0.dtd"><!--MappingfileautogeneratedbyMyEclipsePersistenceTools--><hibernate-mapping><classname="com.model.Student"table="student"catalog="hibernatetest">
<idname="id"type="java.lang.Integer"><columnname="id"/><generatorclass=“native”/></id><propertyname="name"type="java.lang.String"><columnname="name"length="100"/></property><propertyname="theclass"type="java.lang.String"><columnname="theclass"length="100"/></property></class></hibernate-mapping>主鍵(id)生成方式<generator>標(biāo)簽的class值指定主鍵(id)生成方式,常用的有:native:
由數(shù)據(jù)庫(kù)對(duì)主鍵賦值,由Hibernate根據(jù)底層數(shù)據(jù)庫(kù)自行判斷采用identity、hilo、sequence其中一種作為主鍵生成方式。例如,MySQL的自增字段,SQLServer的自增字段;assigned:由應(yīng)用程序?qū)χ麈I賦值,無(wú)需Hibernate參與,一般需要寫(xiě)一個(gè)id生成器Java類來(lái)保證不重復(fù);foreign:使用外部表的字段作為主鍵,例如在一對(duì)一映射中;
主鍵(id)的其他生成方式sequence:
在DB2,PostgreSQL,Oracle,SAPDB,McKoi中使用序列(sequence),而在Interbase中使用
生成器(generator)。返回的標(biāo)識(shí)符是long,short或者int類型
hilo:通過(guò)hi/lo算法實(shí)現(xiàn)的主鍵生成機(jī)制,需要額外的表保存主鍵生成歷史狀態(tài)seqhilo:
與hi/lo類似,只是主鍵歷史狀態(tài)保存在sequence中,使用于支持sequence的數(shù)據(jù)庫(kù),如Oracleidentity:
采用數(shù)據(jù)庫(kù)提供的主鍵生成機(jī)制。如DB2、SQLServer、MySQLincrement:
主鍵按數(shù)值順序遞增。此方式的實(shí)現(xiàn)機(jī)制為在當(dāng)前應(yīng)用實(shí)例中維持將此值加1作為主鍵。這種方式可能產(chǎn)生的問(wèn)題是
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 醫(yī)院康復(fù)科護(hù)理年度述職報(bào)告
- 吊籃施工現(xiàn)場(chǎng)安全管理方案
- 上交大牙體牙髓病學(xué)教案03齲病的臨床表現(xiàn)、診斷及治療
- 文庫(kù)發(fā)布:技術(shù)手機(jī)
- 文庫(kù)發(fā)布:技術(shù)臺(tái)燈
- 家具公司銷售合同質(zhì)量制度
- 某家具公司廠房租賃管理方案
- 醫(yī)院神經(jīng)內(nèi)科護(hù)士長(zhǎng)年度述職報(bào)告
- (2026年)單孔腹腔鏡手術(shù)經(jīng)驗(yàn)分享課件
- (2026年)阿爾茲海默癥患者的護(hù)理課件
- 集團(tuán)公司會(huì)議組織管理辦法
- NX CAM:NXCAM自動(dòng)化編程與生產(chǎn)流程集成技術(shù)教程.Tex.header
- JTT515-2004 公路工程土工合成材料 土工模袋
- 七年級(jí)數(shù)學(xué)上冊(cè)期末試卷及答案(多套題)
- 2024年度初會(huì)《初級(jí)會(huì)計(jì)實(shí)務(wù)》高頻真題匯編(含答案)
- UI設(shè)計(jì)師面試考試題(帶答案)
- GB/T 13542.1-2009電氣絕緣用薄膜第1部分:定義和一般要求
- 政府會(huì)計(jì)準(zhǔn)則優(yōu)秀課件
- 陣發(fā)性室性心動(dòng)過(guò)速課件
- 無(wú)機(jī)與分析化學(xué)理論教案
- 檸檬酸安全技術(shù)說(shuō)明書(shū)(msds)
評(píng)論
0/150
提交評(píng)論