版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
JavaEE企業(yè)級軟件開發(fā)Hibernate入門2014洛陽師范學(xué)院呂延慶本節(jié)內(nèi)容提要ORM和Hibernate簡介數(shù)據(jù)庫、SQL回顧與Mysql的使用MyEclipse對Hibernate開發(fā)的支持Hibernate的配置(Hibernate.cfg.xml)Hibernate映射文件(*.hbm.xml)ORM簡介對象/關(guān)系映射ORM(Object-RelationMapping)用于將對象與對象之間的關(guān)系對應(yīng)到數(shù)據(jù)庫表與表之間的關(guān)系的一種模式。簡單地說,ORM是通過使用描述對象和數(shù)據(jù)庫之間映射的元數(shù)據(jù),將Java程序中的對象自動持久化到關(guān)系數(shù)據(jù)庫中。對象和關(guān)系數(shù)據(jù)是業(yè)務(wù)實現(xiàn)的兩種表現(xiàn)形式,業(yè)務(wù)實體在內(nèi)存中表現(xiàn)為對象,在數(shù)據(jù)庫中表現(xiàn)為關(guān)系數(shù)據(jù)。內(nèi)存中的對象之間存在著關(guān)聯(lián)和繼承關(guān)系。而在數(shù)據(jù)庫中,關(guān)系數(shù)據(jù)無法直接表達(dá)多對多關(guān)聯(lián)和繼承關(guān)系。什么是關(guān)系模型(RelationalModel)?關(guān)系模型把世界看作是由實體(Entity)和聯(lián)系(Relationship)構(gòu)成的。所謂實體就是指現(xiàn)實世界中具有區(qū)分與其它事物的特征或?qū)傩圆⑴c其它實體有聯(lián)系的對象。在關(guān)系模型中實體通常是以表的形式來表現(xiàn)的。表的每一行描述實體的一個實例,表的每一列描述實體的一個特征或?qū)傩浴K^聯(lián)系就是指實體之間的關(guān)系,即實體之間的對應(yīng)關(guān)系。1:11:nm:n關(guān)系數(shù)據(jù)庫:表、字段、主鍵、外鍵什么是面向?qū)ο螅∣bjectOriented)?面向?qū)ο笕筇卣鳎悍庋b、繼承(一般與特殊)、多態(tài)(覆蓋與重載)類、對象、屬性關(guān)系一般與特殊關(guān)系(isa):繼承(extends)、實現(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)一般以中間件的形式存在,主要實現(xiàn)程序?qū)ο蟮疥P(guān)系數(shù)據(jù)庫數(shù)據(jù)的映射。一般的ORM包括四個部分:對持久類對象進(jìn)行CRUD操作的API用來規(guī)定類和類屬性相關(guān)查詢的語言或API規(guī)定mappingmetadata的工具可以讓ORM實現(xiàn)同事務(wù)對象一起進(jìn)行dirtychecking、lazyassociationfetching和其他優(yōu)化操作的技術(shù)。Hibernate概述Hibernate體系結(jié)構(gòu)Hibernate是一個開源ORM框架,一般作為模型層/數(shù)據(jù)訪問層。它通過配置文件(hibernate.cfg.xml或perties)和映射文件(*.hbm.xml)把Java對象或持久化對象(PersistentObject,PO)映射到數(shù)據(jù)庫中的數(shù)據(jù)表,然后通過操作PO,對數(shù)據(jù)庫中的表進(jìn)行各種操作,其中PO就是POJO(普通Java對象)加映射文件。Hibernate的體系結(jié)構(gòu)如圖所示。圖Hibernate體系結(jié)構(gòu)Mysql簡介Mysql是一個開源數(shù)據(jù)庫服務(wù)器,應(yīng)用十分廣泛。數(shù)據(jù)庫核心服務(wù)圖形管理界面(不是必須):MySQLFront或Eclipse自帶的DBBrowserJDBC驅(qū)動程序準(zhǔn)備工作:MySQL中建表createdatabasemytest;usemytest;createtablebook(idINTnotnullauto_increment,nameVARCHAR(32)notnullunique,authorVARCHAR(64),priceDOUBLEnotnull,createtimeTIMESTAMPprimarykey(id)
);上述步驟也可在MyEclipse環(huán)境中以圖形界面完成JDBC實現(xiàn)查詢//JDBC實現(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)實質(zhì)上做了兩步,即添加了Hibernate所需的jar庫文件建立Hibernate.cfg.xml配置文件為Books表建立Hibernate支持文件(HibernateReverseEngineering,反向工程)Book.javaBook.hbm.xmlBookDAO.java(非必須的)Hibernate的核心類和接口Configuration類管理Hibernate的配置信息SessionFactory接口負(fù)責(zé)創(chuàng)建Session的實例Session接口提供了持久化方法,如save,update,delete,query等。
Transaction接口在Hibernate中進(jìn)行事務(wù)操作的接口Query接口Hibernate中用于執(zhí)行HQL查詢Hibernate實現(xiàn)(數(shù)據(jù)插入)//Hibernate實現(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:自動創(chuàng)建表hibernate.cfg.xml的配置中加入:
<property
name="hbm2ddl.auto">update</property>
可以實現(xiàn)根據(jù)映射文件自動建表,可能的取值有create,update,validate和create-drop。
注意,用create時,每次創(chuàng)建表會把數(shù)據(jù)清空。Hibernate配置技巧2:在日志中打印SQL語句hibernate.cfg.xml的配置中加入:
<property
name=“show_sql">true</property>
會在日志中打印SQL語句,有助于理解Hibernate底層工作原理,便于調(diào)試。Hibernate實現(xiàn)(查詢)//Hibernate實現(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ù)庫對主鍵賦值,由Hibernate根據(jù)底層數(shù)據(jù)庫自行判斷采用identity、hilo、sequence其中一種作為主鍵生成方式。例如,MySQL的自增字段,SQLServer的自增字段;assigned:由應(yīng)用程序?qū)χ麈I賦值,無需Hibernate參與,一般需要寫一個id生成器Java類來保證不重復(fù);foreign:使用外部表的字段作為主鍵,例如在一對一映射中;
主鍵(id)的其他生成方式sequence:
在DB2,PostgreSQL,Oracle,SAPDB,McKoi中使用序列(sequence),而在Interbase中使用
生成器(generator)。返回的標(biāo)識符是long,short或者int類型
hilo:通過hi/lo算法實現(xiàn)的主鍵生成機(jī)制,需要額外的表保存主鍵生成歷史狀態(tài)seqhilo:
與hi/lo類似,只是主鍵歷史狀態(tài)保存在sequence中,使用于支持sequence的數(shù)據(jù)庫,如Oracleidentity:
采用數(shù)據(jù)庫提供的主鍵生成機(jī)制。如DB2、SQLServer、MySQLincrement:
主鍵按數(shù)值順序遞增。此方式的實現(xiàn)機(jī)制為在當(dāng)前應(yīng)用實例中維持將此值加1作為主鍵。這種方式可能產(chǎn)生的問題是
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 課程設(shè)計評語存在問題
- 網(wǎng)絡(luò)直播培訓(xùn)課程設(shè)計
- 點歌臺課程設(shè)計
- 新人溝通課程設(shè)計
- 研學(xué)課程設(shè)計證書怎么考
- 課程設(shè)計銀行貸款摘要
- 酸奶包裝設(shè)計課程設(shè)計
- 通信原理課程設(shè)計ask
- 裝修公司整裝課程設(shè)計
- 風(fēng)機(jī)房噪聲課程設(shè)計
- 2025年河北供水有限責(zé)任公司招聘筆試參考題庫含答案解析
- Unit3 Sports and fitness Discovering Useful Structures 說課稿-2024-2025學(xué)年高中英語人教版(2019)必修第一冊
- (完整版)形式發(fā)票模版(國際件通用)
- 武漢東湖賓館建設(shè)項目委托代建合同
- 安徽大學(xué)大學(xué)生素質(zhì)教育學(xué)分認(rèn)定辦法
- 巴布亞新幾內(nèi)亞離網(wǎng)光儲微網(wǎng)供電方案
- 高度限位裝置類型及原理
- 中文版gcs electrospeed ii manual apri rev8v00印刷稿修改版
- 新生兒預(yù)防接種護(hù)理質(zhì)量考核標(biāo)準(zhǔn)
- 除氧器出水溶解氧不合格的原因有哪些
- 沖擊式機(jī)組水輪機(jī)安裝概述與流程
評論
0/150
提交評論