Hibernate學習筆記(二)

Hibernate概述:

什么是Hibernate:是一個持久層的ORM的框架
什么是ORM:
ORM:對象關系映射,指的是將一個java中的對象與關系型數據庫中的表建立一種映射關系,從而操作對象就可以完成數據庫的相關操作

為什么學習Hibernate
簡化JDBC的開發
性能很好

Hibernate的API
Configuration:加載配置文件
SessionFactory:內部維護連接池。配置C3p0連接池,自定義工具類。

Session:
維護一級緩存,與數據庫交互橋梁。
常用的方法:
save(Object obj)
get()/load()
update()
delete()
saveOrUpdate()

Transaction:
commit();
rollback();


#####持久化類編寫的規則

持久化類的概述

【】什么是持久化?將內存中的一個對象持久化到數據庫中過程。Hibernate框架就是用來進行持久化的框架

【】什么是持久化類?一個java對象與數據庫的表建立了映射關系,那么這個類在Hibernate中稱為是持久化類
【】持久化類=java類+映射文件


持久化類編寫的規則

【】對持久化類提供一個無參數的構造函數 Hibernate底層需要使用反射生成實例

【】屬性需要私有,對私有屬性提供public的get和set函數的方法 Hibernate中獲取,設置對象的值

【】對持久化類提供一個唯一標識OID與數據庫主鍵對應 java中通過對象的地址區分是否是同一個對象,數據庫中通過主鍵確定是否是同一記錄,
在Hiberbate中通過持久化類的OID的屬性區分是否是同一對象

【】持久化類中屬性盡量使用包裝類類型 因為基本數據類型默認是0,那么0就會有很多的歧義。包裝類類型默認值就是null

【】持久化類不要使用final進行修飾


#####主鍵生成策略

?

?

?

######持久化類的三種狀態

?


######Hibernate的一級緩存

?

?

//區分三種狀態public void demo1(){Session session=HibernateUtils.GetSession();//手動開啟事務Transaction transaction=session.beginTransaction();HibernateDemo1 hibernateDemo1=new HibernateDemo1();//瞬時態對象:沒有唯一標識OID,沒有被Session管理hibernateDemo1.setCust_name("XXXX");session.save(hibernateDemo1);//持久態對象:有唯一標識OID,被Session管理transaction.commit();//事件的提交session.close();//會話關閉//session.clear();//清空所有//session.evict(hibernateDemo1);//清空一個對象。這是一級緩存的管理處理//脫管態對象:有唯一標識對象OID,沒有被Session管理System.out.println("客戶名稱:"+hibernateDemo1.getCust_name());}

?

?


#####事務的回首

【】事務:事務指的是邏輯上的一組操作,組成這組操作的各個邏輯單元要么全部成功,要么全部都失敗
【】事務:事務指的是邏輯上的一組操作,組成這組操作的各個邏輯單元要么全部成功,要么全部都失敗

####事務的特性:

【】原子性:代表事務不可分割

【】一致性:代表事務執行前后,數據的完整性保持一致

【】隔離性:代表一個事務執行的過程中,不應該受到其他事務的干擾

【】持久性:代表事務執行完成后,數據就持久到數據庫中

####如果不考慮隔離的問題,會引發如下的安全問題:

【】讀問題

#臟讀:一個事務讀到另一個事務未提交的數據

#不可重復讀:一個事務讀到另一個事務已經提交的update數據,導致在前一個事務多次查詢的結果不一致

#虛讀:一個事務讀到另一個事務已經提交的insert數據,導致在前一個事務多次查詢的結果不一致

【】寫問題(了解)

#引發兩類丟失更新

【】讀問題的解決

#設置事務隔離級別

#Read uncommitted 以上都問題都會發生

#Read committed 解決臟讀,但是不可重復讀和虛讀有可能發生

#Repeatable read 解決臟讀和不可重復讀,但是虛讀有可能發生

#Serializable 解決所有讀問題

一般的情況下,數據庫通常會使用第二或者第三種方式隔離,默認的oracle是使用第二種,而mysql是使用第三種

關于在Hibernate中配置隔離的相關的問題--照片

設置隔離級別 <property name="hibernate.connection.isolation">4</property>

?

?

####sevice事務:

#####Hibernate的其他API

【】Query

public void queryTest(){Session session=HibernateUtils.GetSession();//手動開啟事務Transaction transaction=session.beginTransaction();//通過Session獲得Query接口String hql="from HibernateDemo1";//查詢HIbernateDemo1中的對應表的數據,可以設置whereorg.hibernate.Query query=session.createQuery(hql);//設置條件//query.setParameter(0, "1");//設置分頁query.setFirstResult(0);//起始數據query.setMaxResults(2);//每頁的顯示數List<HibernateDemo1> list=query.list();transaction.commit();//事件的提交session.close();//會話關閉}

?

?

【】Criteria

?

public void CriteriaTest(){Session session=HibernateUtils.GetSession();//手動開啟事務Transaction transaction=session.beginTransaction();//通過session獲得Criteria的對象/* Criteria criteria=session.createCriteria(HibernateDemo1.class);List<HibernateDemo1>list=criteria.list();//獲取數據表的全部信息*///條件查詢Criteria criteria=session.createCriteria(HibernateDemo1.class);criteria.add(Restrictions.like("cust_name","宋%"));List<HibernateDemo1>list=criteria.list();//獲取到查詢的信息//設置分頁criteria.setFirstResult(0);criteria.setMaxResults(3);transaction.commit();//事件的提交session.close();//會話關閉}

?

?

【】SQLQuery

?

?

?

?信息類:

public class HibernateDemo1 {private long cust_id;private String cust_name;private String cust_source;private String cust_industry;private String cust_level;private String cust_phone;private String cust_mobile;public long getCust_id() {return cust_id;}public void setCust_id(long cust_id) {this.cust_id = cust_id;}public String getCust_name() {return cust_name;}public void setCust_name(String cust_name) {this.cust_name = cust_name;}public String getCust_source() {return cust_source;}public void setCust_source(String cust_source) {this.cust_source = cust_source;}public String getCust_industry() {return cust_industry;}public void setCust_industry(String cust_industry) {this.cust_industry = cust_industry;}public String getCust_level() {return cust_level;}public void setCust_level(String cust_level) {this.cust_level = cust_level;}public String getCust_phone() {return cust_phone;}public void setCust_phone(String cust_phone) {this.cust_phone = cust_phone;}public String getCust_mobile() {return cust_mobile;}public void setCust_mobile(String cust_mobile) {this.cust_mobile = cust_mobile;}@Overridepublic String toString() {return "HibernateDemo1 [cust_id=" + cust_id + ", cust_industry="+ cust_industry + ", cust_level=" + cust_level+ ", cust_mobile=" + cust_mobile + ", cust_name=" + cust_name+ ", cust_phone=" + cust_phone + ", cust_source=" + cust_source+ "]";}}

?

?

工具類:

?

public class HibernateUtils {//這個包的主要重用是為了放置工具類//這個工具類是Hibernate的工具類public static final Configuration cfg;public static final SessionFactory sf;//創建一個SessionFactory對象:類似于JDBC中連接池static{//加載Hibernate核心配置文件cfg=new Configuration().configure();sf=cfg.buildSessionFactory();//此處相當于創建工廠
    }//對外設置一個接口public static Session GetSession(){//通過SessionFactory獲取到Session對象,類似于JDBC中的Connectionreturn sf.openSession();}
}

轉載于:https://www.cnblogs.com/byczyz/p/11427494.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/386175.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/386175.shtml
英文地址,請注明出處:http://en.pswp.cn/news/386175.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Java-進階:多線程1

目錄 一、概述 二、Thread 類 三、創建線程&#xff1a;繼承 Thread 類 四、創建線程&#xff1a;實現 Runnable 接口 五、線程優先級 六、線程的生命周期 七、同步代碼塊 一、概述 1. 進程和線程 進程&#xff1a;進程指正在運行的程序。線程&#xff1a;線程是進程中的一個…

Struts2學習筆記(一)--入門常見配置

Struts2框架的學習路線 l 第一天&#xff1a;Struts2的概述、Struts2的入門、Struts2常見的配置、Struts2的Action的編寫 l 第二天&#xff1a;Struts2的數據的封裝、結果頁面配置 l 第三天&#xff1a;Struts2的值棧和OGNL表達式 l 第四天&#xff1a;Struts2的標簽庫 Struts2…

Java-進階:多線程2

目錄 一、Lock 接口 二、線程間的通信 三、線程池 四、定時器 Timer 五、多線程和異常 一、Lock 接口 1. 線程鎖 鎖是控制多個線程對共享資源進行訪問的工具。通常&#xff0c;鎖提供了對共享資源的獨占訪問。一次只能有一個線程獲得鎖&#xff0c;對共享資源的所有訪問…

Java周總結1

一、計算機高級編程語言類型&#xff1a; a.編譯型 b.解釋型 Hello.java Java源文件 編譯 Hello.class 字節碼文件 解釋 01101100.... &#xff08;二進制&#xff09;機器碼指令 computer…

MMKV集成與原理,先收藏了

標準文檔流 標準文檔流&#xff0c;指的是元素排版布局過程中&#xff0c;元素會默認自動從左往右&#xff0c;從上往下的流式排列方式。前面內容發生了變化&#xff0c;后面的內容位置也會隨著發生變化。 HTML就是一種標準文檔流文件 HTML中的標準文檔流特點通過兩種方式體現…

Java周總結3

撰寫第三周課程總結及實驗報告&#xff08;一&#xff09; Java實驗報告 班級 計科一班 學號 20188375 姓名 湯云云 完成時間 評分等級 實驗一 Java開發環境與簡單Java程序 一、 實驗目的 &#xff08;1&#xff09; 熟悉JDK開…

MMKV集成與原理,吊打面試官系列!

前言 校招 -1 年 這個階段還屬于成長期&#xff0c;更需要看重的是你的基礎和熱情。對于 JS 基礎&#xff0c;計算機基礎&#xff0c;網絡通信&#xff0c;算法等部分的要求會相對高一些。畢竟這個階段比較難考察你的業務項目中的沉淀&#xff0c;所以只能從基礎部分入手考察。…

CV2攝像頭人臉、人眼、微笑等檢測

import cv2face_cascade cv2.CascadeClassifier(cv2.data.haarcascades haarcascade_frontalface_default.xml)#人臉 eye_cascade cv2.CascadeClassifier(cv2.data.haarcascades haarcascade_eye.xml)#人眼 smile_cascadecv2.CascadeClassifier(cv2.data.haarcascades haa…

MMKV集成與原理,成功跳槽阿里!

前言 在初學前端的時候&#xff0c;我們總會遇到一些問題&#xff0c;我們可以在網上看到很多關于前端的這些問題&#xff1a; 你們都是怎么學web前端的&#xff1f; 零基礎&#xff0c;怎么自學好前端&#xff1f; 前端需要學多久&#xff0c;都學哪些知識&#xff1f; 想成為…

第四周課程總結試驗報告(二)

Java實驗報告 實驗二 Java簡單類與對象 一、 實驗目的 &#xff08;1&#xff09; 掌握類的定義&#xff0c;熟悉屬性、構造函數、方法的作用&#xff0c;掌握用類作為類型聲明變量和方法返回值&#xff1b; &#xff08;2&#xff09; 理解類和對象的區別&#xff0c;掌握構造…

MMKV集成與原理,薪資翻倍

畢業工作一年之后&#xff0c;有了轉行的想法&#xff0c;偶然接觸到程序員這方面&#xff0c;產生了濃厚且強烈的興趣&#xff0c;開始學習前端&#xff0c;成功收割了大廠offer&#xff0c;開始了我的程序員生涯。 在自學過程中有過一些小廠的面試經歷&#xff0c;也在一些小…

Spring入門與常用配置

什么是Spring Spring&#xff1a;SE/EE開發的一站式框架。 一站式框架&#xff1a;有EE開發的每一層解決方案。 WEB層 &#xff1a;SpringMVC Service層 &#xff1a;Spring的Bean管理&#xff0c;Spring聲明式事務 DAO層 &#xff1a;Spring的Jdbc模板&#xff0c;Spring的ORM…

MMKV集成與原理,詳細學習指南

前言 本文主要是javascript和css方面的基礎面試題&#xff0c;適合面試前以及平時復習食用。 基礎知識是前端一面必問的&#xff0c;如果你在基礎知識這一塊翻車了&#xff0c;就算你框架玩的再6&#xff0c;webpack、git、node學習的再好也無濟于事&#xff0c;因為對方就不…

第五周課程總結實驗報告(三)

實驗三 String類的應用 一、實驗目的 &#xff08;1&#xff09; 掌握類String類的使用&#xff1b; &#xff08;2&#xff09; 學會使用JDK幫助文檔&#xff1b; 二、實驗內容 1.已知字符串&#xff1a;"this is a test of java".按要求執行以下操作&#xff1a;&a…

MMKV集成與原理,趕緊學起來

開頭 Web前端開發基礎知識學習路線分享&#xff0c;前端開發入門學習三大基礎&#xff1a;HTML、CSS、JavaScript。除此之外還要學習數據可視化、Vue、React、Angular相關框架&#xff0c;熟練運用框架提升開發效率&#xff0c;提升穩定性。 [外鏈圖片轉存失敗,源站可能有防盜…

MMKV集成與原理,輕松拿下offer

從事前端開發工作差不多3年了&#xff0c;自己也從一個什么都不懂的小白積累了一定的理論和實踐經驗&#xff0c;并且自己也對這3年來的學習實踐歷程有一個梳理&#xff0c;以供后面來細細回憶品味。 1、為什么選擇學習前端開發&#xff1f; 你可能是因為興趣&#xff0c;完成…

React面試題總結,一文說清!

前言 JavaScript是面向 Web 的編程語言&#xff0c;獲得了所有網頁瀏覽器的支持&#xff0c;是目前使用最廣泛的腳本編程語言之一&#xff0c;也是網頁設計和 Web 應用必須掌握的基本工具。 JavaScript主要用途 嵌入動態文本與HTML頁面對瀏覽器時間做出相應讀寫HTML元素在數…

React面試題總結,含愛奇藝,小米,騰訊,阿里

前言 校招 -1 年 這個階段還屬于成長期&#xff0c;更需要看重的是你的基礎和熱情。對于 JS 基礎&#xff0c;計算機基礎&#xff0c;網絡通信&#xff0c;算法等部分的要求會相對高一些。畢竟這個階段比較難考察你的業務項目中的沉淀&#xff0c;所以只能從基礎部分入手考察。…

React面試題總結,就是這么簡單

前言 昨天有幸去字節面試了&#xff0c;順便拿到了offer&#xff0c;把還記得的東西寫下來&#xff0c;供大家參考一下。 計算機網絡篇 HTTP HTTP 報文結構是怎樣的&#xff1f;HTTP有哪些請求方法&#xff1f;GET 和 POST 有什么區別&#xff1f;如何理解 URI&#xff1f;如…

CSS清除默認樣式,成功入職騰訊

前言 又逢金三銀四&#xff0c;拿到大廠的offer一直是程序員朋友的一個目標&#xff0c;我是如何拿到大廠offer的呢&#xff0c;今天給大家分享我拿到大廠offer的利器&#xff0c;前端核心知識面試寶典&#xff0c;內容囊括Html、CSS、Javascript、Vue、HTTP、瀏覽器面試題\數…