Hibernate培訓ppt課件_第1頁
Hibernate培訓ppt課件_第2頁
Hibernate培訓ppt課件_第3頁
Hibernate培訓ppt課件_第4頁
Hibernate培訓ppt課件_第5頁
已閱讀5頁,還剩50頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

1、124原理和開發(fā)流程緩存機制3對象間關聯(lián)關系HQL & Criteria ORM 框架原理Hibernate 開發(fā)流程框架簡介框架(Framework)什么是框架框架的特點框架的意義- 為處理某一類問題給出的一整套方案- 給出運用骨架,細節(jié)由開發(fā)者定制- 面向接口- 重用性- 擴展性- 屏蔽底層細節(jié),提高開發(fā)效率- 構造一致,穩(wěn)定性好,利于協(xié)同任務框架舉例框架ORM 框架DI 框架MVC 框架xxx 框架HibernateMyBatisJPASpringGuicexxx實現(xiàn)Bxxx實現(xiàn)AStruts1Struts2SpringMVCWeld每一種框架,都是為理處理某一類的問題(ORM,DI,M

2、VC等);同時,每一種框架都會有很多詳細實現(xiàn)。JDBCJavaApplicationJDBC優(yōu)點:一些Java接口的集合,一致和數(shù)據(jù)庫交互的規(guī)范,一切數(shù)據(jù)庫都采用同一套操作流程。存在哪些缺乏?存在的缺乏改換數(shù)據(jù)庫?- 面向接口編程- 改換實現(xiàn)類對象和關系的阻抗?對象記錄CUD對象記錄R- 不能直接面向對象操作,需求來回轉換。save,update,deleteinsert into tableupdate tabledelete from tableselect * from 大型工程jdbc代碼量?維護本錢?-效率低,維護本錢高。能否有處理方案?get(id)面向關系面向對象ORMObjec

3、t/Relation Mapping對象-關系映射類表屬性字段記錄對象實例面向對象 vs 面向關系面向對象面向關系共同點都用來訪問數(shù)據(jù)庫區(qū)別1用類定義對象,用屬性保存數(shù)據(jù)。用表定義記錄,用字段保存數(shù)據(jù)。區(qū)別2類之間的關系:繼承,依賴,關聯(lián)表間關系:主鍵-外鍵區(qū)別3面向對象方式訪問數(shù)據(jù)庫使用SQL語法ORM 就是要在類和表之間建立一個規(guī)范的映射關系,從而使對象可以永久耐久化到數(shù)據(jù)庫中,也可將數(shù)據(jù)庫中的數(shù)據(jù)復原成內(nèi)存中的對象。提供一種面向對象的方式來訪問數(shù)據(jù)庫。ORM 框架原理Java ApplicationORM FramewrokJava ApplicationJDBC編程,SQL語句,對象封

4、裝 JDBC編程SQL語句對象封裝 手動自動手動不運用ORM框架運用ORM框架配置框架ORM APIData BaseData BaseORM 框架品牌ORM 框架HibernateMyBatisJPA別名iBATIS,開源半自動ORM框架(知道) Java Persistence API(知道)開源ORM框架廣泛運用(學習目的)其他ORM 框架品牌 ActiveJDBC - Java implementation of Active Record pattern, inspired by Ruby on Rails Cayenne, Apache, open source for Java

5、Kodo, commercial implementation of both Java Data Objects and Java Persistence API Torque, an object-relational mapper for Java Athena Framework, open source Java ORM, native support for multitenancy SaaS and remoting to Adobe Flex Carbonado, open source framework, backed by Berkeley DB or JDBC Ebea

6、n, open source ORM framework EclipseLink, Eclipse persistence platform Enterprise Objects Framework, Mac OS X/Java, part of Apple WebObjects iBATIS, maintained by ASF, inactive as of 2021 Java Data Objects (JDO) Java Object Oriented Querying (jOOQ) DataNucleus, open source JDO and JPA implementation

7、 JPOX, open source JDO 2 reference implementation OpenJPA, Apache, open source, supports JPA API ORMLite, lightweight open source framework supporting JDBC and Android TopLink by Oracle QuickDB ORM, open source ORM framework (GNU LGPL) ObjectDBHibernate 優(yōu)勢是一個全自動 ORM 框架表構造自動生成流程自動生成無縫切換 DataBase代碼零改動

8、,僅更新部份配置文件即可。面向對象操作, 更簡單易用的 API如: save(obj), update(obj), delete(obj)Hibernate 開展歷史2001Hibernate 1.02003Hibernate 2.0隨后參與 JBoss2005Hibernate 3.0Interceptor支持Annotation2021實現(xiàn)JPA2.0規(guī)范2021Hibernate 4.0multi-tenancyServiceRegistryHibernate 編程流程1. 配置 Hibernate 開發(fā)環(huán)境2. 編寫實體類,配置 ORM3. 配置 hibernate.cfg.xml,

9、perties4. 調用 Hibernate API建立工程,導入hibernate jar包,數(shù)據(jù)庫驅動jar包配置數(shù)據(jù)庫銜接信息,方言,實體類途徑實體類規(guī)范,ORM配置(注解或XML)下載 H/orm/緊縮包目錄構造開發(fā)手冊jar包源碼編寫實體類 規(guī)范實體類 = java bean規(guī)范 + 數(shù)據(jù)庫中有表與之對應 Java Bean 規(guī)范:假設干私有屬性一個空參構造自動產(chǎn)生的get和set方法Java Bean 在不同場所中,有不同的運用,也能夠有不同的叫法。編寫實體類 例如getter & setter方法已省略實現(xiàn)Seriali

10、zable接口是可選的,但建議實體類都實現(xiàn)這個接口ORM 配置XML配置Annotation配置Entitypublic class Event private Long id;private String title;private Date date;IdGeneratedValuepublic Long getId() return id; private void setId(Long id) this.id = id;public Date getDate() return date;public void setDate(Date date) this.date = date;pu

11、blic String getTitle() return title;public void setTitle(String title) this.title = title;ORM配置信息,寫在一個XML文件中ORM配置信息,寫在實體類源代碼中XML vs Annotation 比較項XML配置Annotation配置誕生版本JDK 1.4JDK 1.5配置信息寫在一個外部的XML文件中寫在實體類源碼中編輯難度中等簡單,自然編輯時間中等快捷可維護性中等,配置文件數(shù)與實體類數(shù),成正比,刪除實體類時,需刪除對應的XML簡單,無需寫XML,直接刪除實體類即可改變配置修改XML,無需編譯修改類,

12、需重新編譯留意:1XML和Annotation,都是實現(xiàn)同一個目的的不同方式; 2上課演示Annotation的配置方式,XML配置方式請課后自學,有問題再提問。Annotation簡介Annotation(注解), 是Java5的新特性,提供一些本來不屬于程序的Metedata(元數(shù)據(jù)),寫在類名、屬性名或方法名上方,表示類名、屬性名或方法名具有 某種特性。比如:注解類型位置作用Deprecated類名、屬性名或方法名上方已過時,不贊成使用。Override方法名上方方法重寫SuppressWarnings類名、屬性名或方法名上方抑制指定的警告信息Test單元測試方法上方能在JUnit下測試

13、運行Hibernate 常用注解 - 1注解類型位置作用是否必須常用屬性Entity類名上方指定該類是實體類YES無Table類名上方指定該類對應的表NOname:表名稱Id屬性的get方法上方屬性是主鍵屬性YES無Column自定義該屬性對應的字段信息(包括字段名,字段長度,字段約束等)NOname:字段名稱length:字段長度unllable:非空約束unique:唯一約束GeneratedValue缺省情況下:簡單主鍵策略(比如:自增或序列等)NOStrategy:主鍵策略Generator:生成器Hibernate 常用注解 - 2注解類型位置作用是否必須屬性Enumerated屬性

14、的get方法上方屬性是枚舉類型NOEnumType.ORDINAL,保存數(shù)字EnumType. STRING,保存字符串Transient屬性不要持久化NO無Temporal屬性是日期類型NOTemporalType. TIMESTAMP,格式: 年月日時分秒TemporalType.DATE,格式: 年月日TemporalType.TIME,格式: 時分秒注解配置例如 - 1指定User是實體類指定User對應的表名是tbl_userid屬性是主鍵屬性簡單主鍵戰(zhàn)略(自增或序列)定義name屬性對應的字段名是u_name,長度為30,非空約束注解配置例如 - 2定義枚舉類secret屬性,暫時

15、調用,不需求保管數(shù)據(jù)庫。定義各種屬性title屬性保管枚舉字符串birthDate屬性,以年月日格式保管注解運用闡明實踐開發(fā)時,究竟用哪些注解?可以按照以下步驟:1先明確需求,一個對象有哪些屬性;2按實體類規(guī)范,寫java bean,聲明屬性;3按屬性的不同類型,再加上匹配的注解。Hibernate 主配置文件文件名: hibernate.cfg.xml (默許名,商定俗稱) 可以更改稱號位置: src根目錄下Hibernate 配置信息Java ApplicationHibernateORMData Base數(shù)據(jù)庫銜接信息driver,url,username,password屬性(如:方言

16、,顯示sql,生成表等)ORM 配置以上信息都可以配置在hibernate主配置文件中Java applicationDataSource 數(shù)據(jù)源DataSourceData BaseConnection 1Connection 2Connection PoolConnection 1Connection 2Connection NDataSource 可被看成是一個創(chuàng)建和維護 Connection 的工廠被占用被占用DataSource 數(shù)據(jù)源-2Hibernate 內(nèi)建的數(shù)據(jù)源無法用于產(chǎn)品用途可以運用 c3p0 數(shù)據(jù)源進展交換! 步驟如下:1參與hibernate-c3p0-*.jar、c

17、3p0-*.jar 這兩個jar包;2 ernal.C3P0ConnectionProvider 5 20 300 50 3000Dialect 方言HibernateORMMySQL 方言Oracle 方言SQLServer 方言MySQL 方言Oracle 方言SQLServer 方言需求銜接哪個數(shù)據(jù)庫,就選擇該數(shù)據(jù)庫的方言例如代碼dtd不需求背,從project/etc文件夾下的模板中拷貝即可自動產(chǎn)生table顯示SQL語句Log4J 簡介Log4j是 的一個開源工程,經(jīng)過運用Log4j,我們可以做到以下效果:1自定義日志信息保送的目的地是控制

18、臺、文件、Email等各種方式;2靈敏控制每一條日志的輸出格式;3經(jīng)過定義每一條日志信息的級別,我們可以更加細致地控制日志的生成 過程,而不需求修正運用的代碼。被廣泛運用在各種框架工程中,包括SSH.定義以下級別: debug info warn error fatal越接近左側,輸出信息越多(詳細); 越接近右側,輸出信息越少(僅出錯時輸出)命名:商定俗稱就是perties位置:放在工程src根目錄下perties 例如#define log level and output type.log4j.rootLogger=info, console# dir

19、ect log messages to stdout #log4j.appender.console=org.apache.log4j.ConsoleAppenderlog4j.appender.console.Target=System.outlog4j.appender.console.layout=org.apache.log4j.PatternLayoutlog4j.appender.console.layout.ConversionPattern=%dABSOLUTE %5p %c1:%L - %m%n框架類工程中都會運用log4j,此文件編輯后普通不再更改.Hibernate AP

20、I 3.xConfigurationSessionFactorySessionTransactionQueryCriteriaHibernate的主配置信息,擔任解析 hibernate.cfg.xmlSession工廠類,用于創(chuàng)建session等同于數(shù)據(jù)庫銜接,添加緩存機制事務控制對象,用于提交或回滾事務基于 HQL 的查詢基于約束條件的查詢Configuration該對象的目的,就是初始化一個具備一切配置信息的對象。通常可以有以下兩種途徑:經(jīng)過解析 src 根目錄下的 hibernate.cfg.xml 來實現(xiàn);(引薦運用)經(jīng)過代碼手動配置。XMLConfigurationSessionF

21、actory 關系表示圖ConfigurationSessionFactoryDataBaseTransactionTransaction內(nèi)存空間SessionSessionSessionTransactionHibernate API 4.xServiceRegistryConfigurationSessionFactorySessionTransactionQueryCriteria4.X 效力注冊類,用于注冊各項效力ServiceRegistry在較早版本的hibernate中已有的各種功能,在4.x版本中抽成Service。目的是為了使得工程構造更符合SOA(面向效力架構)的設計要求。

22、SessionFactory 例如代碼v3.xv4.x代碼演示Session API面向關系面向對象類表屬性字段記錄對象實例運轉機制在開發(fā)時,程序員專注于面向對象編程;在運轉時,Hibernate 自動將CRUD操作翻譯成相應的 SQL 并執(zhí)行。映射備注 - 1關于sql表名,字段名,保管字問題:假照實體類的類名,屬性名中,出現(xiàn)sql保管字:order,desc,table.可以運用Table自定義表名; Column自定義字段名的方式來處理.關于字段約束的unique獨一性無效的問題.緣由:SessionFactory在初始化時,會檢查hibernate.hbm2ddl.auto屬性,并自動

23、產(chǎn)生表.但此功能有缺損,無法產(chǎn)生獨一性約束.處理方法:運用Hibernate的SchmaExport工具類.備注 - 2GeneratedValue可以自定義主鍵生成戰(zhàn)略.在Oracle數(shù)據(jù)庫中,主鍵戰(zhàn)略是序列.但是默許情況下,是共享同一個序列: hibernate_sequence處理方案: 可以為每張表定義一個公用的序列.備注 - 3Get 和 Load 的區(qū)別:前往類型get()方法假設查詢不到對象實例,前往null;load()方式假定對象實例一定存在,因此查詢不到時會拋出異常。org.hibernate.ObjectNotFoundException對象本身屬性load()方法延遲加載對象本身屬性,待運用屬性時再運轉sql語句;get()方法一次性查詢對象本身屬性,直接運轉sql語句。備注 - 4目前只能對單個實體類的進展操作,假設要實現(xiàn)1:1, 1:N, N:N, 需求學習完第三章對象間關聯(lián)

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論