J2EE企業(yè)級(jí)軟件開發(fā)之 Hibernate入門_第1頁
J2EE企業(yè)級(jí)軟件開發(fā)之 Hibernate入門_第2頁
J2EE企業(yè)級(jí)軟件開發(fā)之 Hibernate入門_第3頁
J2EE企業(yè)級(jí)軟件開發(fā)之 Hibernate入門_第4頁
J2EE企業(yè)級(jí)軟件開發(fā)之 Hibernate入門_第5頁
已閱讀5頁,還剩15頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

JavaEE企業(yè)級(jí)軟件開發(fā)Hibernate入門2014洛陽師范學(xué)院呂延慶本節(jié)內(nèi)容提要ORM和Hibernate簡(jiǎn)介數(shù)據(jù)庫、SQL回顧與Mysql的使用MyEclipse對(duì)Hibernate開發(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ù)庫表與表之間的關(guān)系的一種模式。簡(jiǎn)單地說,ORM是通過使用描述對(duì)象和數(shù)據(jù)庫之間映射的元數(shù)據(jù),將Java程序中的對(duì)象自動(dòng)持久化到關(guān)系數(shù)據(jù)庫中。對(duì)象和關(guān)系數(shù)據(jù)是業(yè)務(wù)實(shí)現(xiàn)的兩種表現(xiàn)形式,業(yè)務(wù)實(shí)體在內(nèi)存中表現(xiàn)為對(duì)象,在數(shù)據(jù)庫中表現(xiàn)為關(guān)系數(shù)據(jù)。內(nèi)存中的對(duì)象之間存在著關(guān)聯(lián)和繼承關(guān)系。而在數(shù)據(jù)庫中,關(guān)系數(shù)據(jù)無法直接表達(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í)體通常是以表的形式來表現(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ù)庫:表、字段、主鍵、外鍵什么是面向?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ù)庫數(shù)據(jù)的映射。一般的ORM包括四個(gè)部分:對(duì)持久類對(duì)象進(jìn)行CRUD操作的API用來規(guī)定類和類屬性相關(guān)查詢的語言或API規(guī)定mappingmetadata的工具可以讓ORM實(shí)現(xiàn)同事務(wù)對(duì)象一起進(jìn)行dirtychecking、lazyassociationfetching和其他優(yōu)化操作的技術(shù)。Hibernate概述Hibernate體系結(jié)構(gòu)Hibernate是一個(gè)開源ORM框架,一般作為模型層/數(shù)據(jù)訪問層。它通過配置文件(hibernate.cfg.xml或perties)和映射文件(*.hbm.xml)把Java對(duì)象或持久化對(duì)象(PersistentObject,PO)映射到數(shù)據(jù)庫中的數(shù)據(jù)表,然后通過操作PO,對(duì)數(shù)據(jù)庫中的表進(jìn)行各種操作,其中PO就是POJO(普通Java對(duì)象)加映射文件。Hibernate的體系結(jié)構(gòu)如圖所示。圖Hibernate體系結(jié)構(gòu)Mysql簡(jiǎn)介Mysql是一個(gè)開源數(shù)據(jù)庫服務(wù)器,應(yīng)用十分廣泛。數(shù)據(jù)庫核心服務(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庫文件建立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語句hibernate.cfg.xml的配置中加入:

<property

name=“show_sql">true</property>

會(huì)在日志中打印SQL語句,有助于理解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ù)庫對(duì)主鍵賦值,由Hibernate根據(jù)底層數(shù)據(jù)庫自行判斷采用identity、hilo、sequence其中一種作為主鍵生成方式。例如,MySQL的自增字段,SQLServer的自增字段;assigned:由應(yīng)用程序?qū)χ麈I賦值,無需Hibernate參與,一般需要寫一個(gè)id生成器Java類來保證不重復(fù);foreign:使用外部表的字段作為主鍵,例如在一對(duì)一映射中;

主鍵(id)的其他生成方式sequence:

在DB2,PostgreSQL,Oracle,SAPDB,McKoi中使用序列(sequence),而在Interbase中使用

生成器(generator)。返回的標(biāo)識(shí)符是long,short或者int類型

hilo:通過hi/lo算法實(shí)現(xiàn)的主鍵生成機(jī)制,需要額外的表保存主鍵生成歷史狀態(tài)seqhilo:

與hi/lo類似,只是主鍵歷史狀態(tài)保存在sequence中,使用于支持sequence的數(shù)據(jù)庫,如Oracleidentity:

采用數(shù)據(jù)庫提供的主鍵生成機(jī)制。如DB2、SQLServer、MySQLincrement:

主鍵按數(shù)值順序遞增。此方式的實(shí)現(xiàn)機(jī)制為在當(dāng)前應(yīng)用實(shí)例中維持將此值加1作為主鍵。這種方式可能產(chǎn)生的問題是

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論