淺析java程序中hibernate的應(yīng)用總結(jié)
我們知道如果用java連接數(shù)據(jù)庫,大量的SQL代碼,我們就想通過一種工具來操作數(shù)據(jù)庫,
我們首先想到的就是JDBC,但是想更好的針對(duì)類的屬性進(jìn)行操作,我們會(huì)選擇Hibernate。
那么Hibernate 原理是什么呢?
hibernate可以理解為是一個(gè)中間件它負(fù)責(zé)把java程序的sql語句接收過來發(fā)送到數(shù)據(jù)庫,
而數(shù)據(jù)庫返回來的信息hibernate接收之后直接生成一個(gè)對(duì)象傳給java。
一 首先我們先了解一下hibernate的工作7個(gè)流程:
1.讀取并解析配置文件
2.創(chuàng)建SessionFactory
3.打開Session
4.開始一個(gè)事物
5.持久化操作
6.提交事務(wù)
7.關(guān)閉Session
二 接著我們要理解實(shí)體對(duì)象的生命周期是Hibernate 的三種狀態(tài)
瞬時(shí)狀態(tài)(Transient)
剛用new語句創(chuàng)建,還沒有被持久化,且不處于Session的緩存中
持久狀態(tài)(Persistent)
已經(jīng)被持久化,且加入到Session的緩存中
游離狀態(tài)(Detached)
已經(jīng)被持久化,但不再處于Session的緩存中
三 持久化和ORM也是Hibernate中需要理解的一部分。
持久化:數(shù)據(jù)模型(內(nèi)存)《--》存儲(chǔ)模型(持久化設(shè)備),在Java中說持久化,通常指的是使用SQL將數(shù)據(jù)存儲(chǔ)在關(guān)系型數(shù)據(jù)庫中。
ORM是持久化的一種解決方案,主要是把對(duì)象模型和關(guān)系型數(shù)據(jù)庫關(guān)系模型映射起來,并且使用元數(shù)據(jù)對(duì)這些映射進(jìn)行描述。
Hibernate中必須要搭建項(xiàng)目框架編寫hibernate配置文件、實(shí)體映射文件
創(chuàng)建項(xiàng)目并導(dǎo)入jar包
創(chuàng)建Hibernate配置文件
用于配置數(shù)據(jù)庫連接
運(yùn)行時(shí)所需的各種屬性
默認(rèn)文件名為“hibernate.cfg.xml”
測(cè)試連接
使用Hibernate完成數(shù)據(jù)增刪改操作
1.創(chuàng)建實(shí)體類
2.創(chuàng)建和配置映射文件
3.主鍵映射
4.主鍵生成策略
5.在主配置文件中添加實(shí)體映射文件路徑
6.數(shù)據(jù)庫操作
7.單表增刪改查
四 Hibernate 支持兩種主要的查詢方式
(1)HQL(Hibernate Query Languge,Hibernate 查詢語言)查詢
是一種面向?qū)ο蟮牟樵冋Z言,其中沒有表和字段的概念,只有類、對(duì)象和屬性的概念
HQL 是應(yīng)用較為廣泛的方式。
(2) Criteria 查詢
又稱為“對(duì)象查詢”,它用面向?qū)ο蟮姆绞綄?gòu)造查詢的過程做了封裝。
五 在運(yùn)用Hibernate時(shí),我們應(yīng)該注意一些事情
(1)Hibernate是如何延遲加載?
1.Hibernate延遲加載實(shí)現(xiàn):a)實(shí)體對(duì)象 b)集合(Collection)
2.Hibernate3提供了屬性的延遲加載功能
當(dāng)Hibernate在查詢數(shù)據(jù)的時(shí)候,數(shù)據(jù)并沒有存在與內(nèi)存中,當(dāng)程序真正對(duì)數(shù)據(jù)的操作時(shí),對(duì)象才存在與內(nèi)存中,就實(shí)現(xiàn)了延遲加載,他節(jié)省了服務(wù)器的內(nèi)存開銷,從而提高了服務(wù)器的性能。
(2)說下Hibernate的緩存機(jī)制
1. 內(nèi)部緩存存在Hibernate中又叫一級(jí)緩存,屬于應(yīng)用事物級(jí)緩存
2. 二級(jí)緩存:
a) 應(yīng)用及緩存
b) 分布式緩存
條件:數(shù)據(jù)不會(huì)被第三方修改、數(shù)據(jù)大小在可接受范圍、數(shù)據(jù)更新頻率低、同一數(shù)據(jù)被系統(tǒng)頻繁使用、
非關(guān)鍵數(shù)據(jù)
c) 第三方緩存的實(shí)現(xiàn)
- 在Java的Hibernate框架中對(duì)數(shù)據(jù)庫數(shù)據(jù)進(jìn)行查詢操作
- java Hibernate延遲加載
- 從最基本的Java工程搭建SpringMVC+SpringDataJPA+Hibernate
- java Hibernate 一對(duì)多自身關(guān)聯(lián)問題
- 在Java的Hibernate框架中使用SQL語句的簡單介紹
- Java的Hibernate框架中用于操作數(shù)據(jù)庫的HQL語句講解
- JAVA+Hibernate 無限級(jí)分類
- 詳解Java的Hibernate框架中的緩存與二級(jí)緩存
- java優(yōu)化hibernate性能的幾點(diǎn)建議
- java Hibernate多對(duì)多映射詳解及實(shí)例代碼
相關(guān)文章
Spring Boot整合Spring Data Jpa代碼實(shí)例
這篇文章主要介紹了Spring Boot整合Spring Data Jpa代碼實(shí)例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-11-11java IO流將一個(gè)文件拆分為多個(gè)子文件代碼示例
這篇文章主要介紹了java IO流將一個(gè)文件拆分為多個(gè)子文件代碼示例,具有一定借鑒價(jià)值,需要的朋友可以參考下。2017-12-12Java使用枚舉實(shí)現(xiàn)狀態(tài)機(jī)的方法詳解
這篇文章主要介紹了Java使用枚舉實(shí)現(xiàn)狀態(tài)機(jī)的方法詳解,枚舉類型很適合用來實(shí)現(xiàn)狀態(tài)機(jī),狀態(tài)機(jī)可以處于有限數(shù)量的特定狀態(tài),它們通常根據(jù)輸入,從一個(gè)狀態(tài)移動(dòng)到下一個(gè)狀態(tài),但同時(shí)也會(huì)存在瞬態(tài),需要的朋友可以參考下2023-11-11Java8新特性Lambda表達(dá)式的一些復(fù)雜用法總結(jié)
lambda表達(dá)式是JAVA8中提供的一種新的特性,它支持Java也能進(jìn)行簡單的“函數(shù)式編程”。 下面這篇文章主要給大家介紹了關(guān)于Java8新特性Lambda表達(dá)式的一些復(fù)雜用法的相關(guān)資料,需要的朋友可以參考借鑒,下面來一起看看吧。2017-07-07Mybatis的SqlRunner執(zhí)行流程實(shí)現(xiàn)
MyBatis提供了一個(gè)用于操作數(shù)據(jù)庫的SqlRunner工具類,對(duì)JDBC做了很好的封裝,本文主要介紹了Mybatis的SqlRunner執(zhí)行流程實(shí)現(xiàn),具有一定的參考價(jià)值,感興趣的可以了解一下2023-10-10利用Java編寫24點(diǎn)小游戲的實(shí)例代碼
這篇文章主要給大家介紹了關(guān)于如何利用Java編寫24點(diǎn)小游戲的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-01-01