国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計 > 正文

黑馬程序員——Hibernate 相關(guān)概念

2019-11-14 21:19:33
字體:
供稿:網(wǎng)友
黑馬程序員——Hibernate 相關(guān)概念 Posted on 2014-10-13 21:26 誠心誠意 閱讀(...) 評論(...) 編輯 收藏

-----------android培訓(xùn)、java培訓(xùn)、java學(xué)習(xí)型技術(shù)博客、期待與您交流!------------

1、HIbernate支持多種數(shù)據(jù)庫,是一種“跨數(shù)據(jù)庫平臺”的ORM框架。使用Hibernate時需要先創(chuàng)建一個session對話,然后開啟Transaction事務(wù)、進(jìn)行數(shù)據(jù)庫讀寫、提交事務(wù)、關(guān)閉會話。Hibernate事務(wù)也支持回滾。2、實體類有3種狀態(tài),分別是臨時狀態(tài)、持久化狀態(tài)、分離狀態(tài)。臨時狀態(tài)(Transient):對象在保存進(jìn)數(shù)據(jù)庫之前為臨時狀態(tài)。這時候數(shù)據(jù)庫中沒有該對象的信息,該對象的Id屬性也為空。如果沒有被持久化,程序退出時臨時狀態(tài)的對象信息將會丟失。持久化狀態(tài)(Persistent):對象在保存進(jìn)數(shù)據(jù)庫后或者從數(shù)據(jù)庫中加載后、并且沒有脫離Session時為持久化狀態(tài)。這時數(shù)據(jù)庫中有該對象的信息,該對象的Id為數(shù)據(jù)庫中對應(yīng)疾苦的主鍵值。由于還在Session中,持久化狀態(tài)的對象可以執(zhí)行任何有關(guān)數(shù)據(jù)庫的操作,例如獲取集合屬性的值等。分離狀態(tài)(Detached):分離狀態(tài)是對象曾經(jīng)處于持久化狀態(tài)、但是現(xiàn)在已經(jīng)離開Session了。雖然分離狀態(tài)的對象有Id值,有對應(yīng)的數(shù)據(jù)庫記錄,但是已經(jīng)無法執(zhí)行有關(guān)數(shù)據(jù)庫的操作。例如,讀取延遲加載的集合屬性,可能會拋出LazyInitializeException。關(guān)鍵詞:Session 數(shù)據(jù)庫記錄臨時狀態(tài)(Transient):數(shù)據(jù)庫中沒有記錄、沒有在Session中。持久化狀態(tài)(Persistent):數(shù)據(jù)庫中有記錄、在Session中。分離狀態(tài)(Detached):數(shù)據(jù)庫中有記錄、沒在Session中。3、Hibernate中有幾個常用的概念SessionFactory、Session、Transaction。注意這里的Session不同于Servlet中的HttpSession,二者雖然都可理解為回話,但使用的情況不一樣。SessionFactory(org.hibernate.SessionFactory):一個線程安全的Session工廠類,能為不同的線程生成不同的Session。SessionFactory維護(hù)者Session相關(guān)的資源,包括數(shù)據(jù)庫連接池、緩存數(shù)據(jù)等。Session(org.hibernate.Session):Session代表用戶的一次操作。Session的生命周期很短,在操作開始時通過執(zhí)行SessionFactory.openSession()生產(chǎn),在操作結(jié)束時通過執(zhí)行session.close()關(guān)閉。Session維護(hù)著Session相關(guān)的資源。包括Transaction、當(dāng)前數(shù)據(jù)連接等。Transaction(org.hibernate.Transaction):Transaction代表一次事務(wù),事務(wù)內(nèi)包括若干的數(shù)據(jù)修改,事務(wù)提交后才生效。如果事務(wù)失敗或回滾,所有的修改都會失效。Hibernate的事務(wù)不同于數(shù)據(jù)庫的事務(wù)。Hibernate可能使用各種機(jī)制保證事務(wù)性,包括JTA(Java Transaction API,Java事務(wù)接口)、第三方事務(wù)管理、數(shù)據(jù)庫事務(wù)等。一個SessionFactory維護(hù)一個數(shù)據(jù)庫。如果有多個數(shù)據(jù)庫,可以創(chuàng)建多個SessionFactory。Hibernate允許程序使用多個SessionFactory同時操作多個數(shù)據(jù)庫。4、配置實體類和數(shù)據(jù)庫表單之間的映射關(guān)系的2種方式:(1)、xml文件配置。XML配置文件時最基礎(chǔ)的配置。一般與實體類在同一個包中,命名風(fēng)格 為 *hbm.xml 即hibernate mapping。(2)、@注解配置。是Java官方的JPA(Java Persistence API)提供的。特殊情況注意:@注解配置時,如果某屬性沒有配置,則默認(rèn)該屬性名與數(shù)據(jù)庫表單列名相同;而XML文件配置時,如果如果某屬性沒有配置,則默認(rèn)該屬性沒有對應(yīng)的數(shù)據(jù)庫表單列,不參與持久化。二者時接人不同的。5、主鍵增長策略 ,數(shù)據(jù)庫自增長與Hibernate自增長產(chǎn)生區(qū)別的特殊情況。但是如果某數(shù)據(jù)庫同時被兩個Hibernate程序使用,那么此時使用Hibernate自增長將會出現(xiàn)錯誤。例如,如果當(dāng)前主鍵值為10,那么Hibernate會認(rèn)為下個主鍵值為11,兩個Hibernate程序插入數(shù)據(jù)時都會講主鍵值設(shè)為11,這時會因為主鍵沖突而導(dǎo)致其中一個寫數(shù)據(jù)失敗。6、數(shù)據(jù)庫普通鍵的屬性(1)Integer類型與int類型的不同之處:Integer默認(rèn)為null,在數(shù)據(jù)庫中冶表現(xiàn)為null,而int默認(rèn)為0,在數(shù)據(jù)庫中冶表現(xiàn)為0。(2)普通屬性使用@Column與@Basic配置。二者都可以省略。如果省略,則全部按照默認(rèn)的爾規(guī)則配置。@Column中可指定@nullable 是否允許為null@unique 是否唯一@insertable 是否允許插入@updatable 是否允許更新@length 列長度@columnDefinition 列類型@scale 整數(shù)長度@PRecision 小數(shù)點精度這些屬性用于生成DDL建表語句。如果屬性對應(yīng)列名與屬性名一致,@Column可以省略。@Temporal。日期屬性如果是java.util.Date類型的,必須要用@Temporal配置日期類型,取值可以為Date、Time、Timestemp。java.sql.Date(只有年月日)、java.sql.Time(只有時分秒)、java.sql.TimeStamp(同時又年月日、時分秒),都是java.util.Date的子類。@Transaction ,臨時屬性,不在數(shù)據(jù)庫表單中生成對應(yīng)列。@Version。使用版本的方式實現(xiàn)配置樂觀鎖。@Basic可為普通屬性配置加載方式,默認(rèn)為即時加載。如果列數(shù)據(jù)比較大,例如大文本類型或者LOB類型,可配置為延遲加載。optional配置該列是否可為null。如果為true,表示該屬性石可選的,可以為null,否則不可以為null。7、JPA 對實體類的要求 由于Java注解需要配置到實體類中,因此JPA要求實體類必須為POJO(簡單Java對象),而不能為String等基本類型。


上一篇:java 注解

下一篇:Leetcode: Clone Graph

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 北辰区| 万安县| 凉山| 老河口市| 武安市| 长治县| 崇左市| 罗定市| 盐城市| 绥宁县| 剑河县| 巴林右旗| 宝鸡市| 渑池县| 固安县| 沙坪坝区| 舒城县| 柳江县| 湟源县| 攀枝花市| 平陆县| 马龙县| 舞阳县| 巍山| 丹寨县| 将乐县| 阳曲县| 信宜市| 灵宝市| 鄂州市| 泾源县| 武宣县| 丰城市| 永城市| 仪陇县| 临邑县| 凤凰县| 鄯善县| 汽车| 玛纳斯县| 霸州市|