久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

Hibernate學(xué)習(xí)筆記1

 太極混元天尊 2018-05-08
java學(xué)習(xí)

有完整的Java求職學(xué)習(xí)路線的學(xué)習(xí)資料

溫馨提示

如果你是初學(xué)者,,或者是自學(xué)者,!你可以加小編微信(xxf960513)!小編可以給你學(xué)習(xí)上,,工作上的一些建議以及可以給你(免費(fèi))提供學(xué)習(xí)資料,!最重要我們還可以交個(gè)朋友!你在學(xué)習(xí)上有什么問題都可以加小編微信進(jìn)行私聊,!小編都會為你解答,!

注:本公眾號純屬個(gè)人公益公眾號!不存在任何收費(fèi)項(xiàng)目,!免費(fèi)分享所有學(xué)習(xí)資料,!只求大家多多支持!多多關(guān)注??!

Hibernate學(xué)習(xí)筆記1


1.Hibernate框架介紹

1.1.什么是hibernate

1.2.什么是orm

1.3.為什么使用hibernate框架

2.Hiberate框架學(xué)習(xí)目標(biāo)

3.Hibernate快速入門

3.1.Hibernate下載

3.2.創(chuàng)建數(shù)據(jù)庫與表

3.3.創(chuàng)建實(shí)體類

3.4.導(dǎo)入hibernate依賴jar包

3.5.創(chuàng)建映射文件

3.6.創(chuàng)建hibernate核心配置文件

3.7.編寫測試代碼

3.8.Hibernate工作原理總結(jié)

4.Hibernate配置詳解

4.1.核心配置文件配置

4.2.映射文件配置

5. Hibernate常用API介紹

5.1.Configuration

5.2.sessionFactory

5.3.Session

5.4.Transaction

5.5.Query

5.6.Criteria

提示:點(diǎn)擊下面的“閱讀原文”可以查看更多筆記


1.Hibernate框架介紹

1.1.什么是hibernate

Hibernate是一個(gè)開放源代碼的對象關(guān)系映射框架,它對JDBC進(jìn)行了非常輕量級的對象封裝,,它將POJO與數(shù)據(jù)庫表建立映射關(guān)系,,是一個(gè)全自動的orm框架,hibernate可以自動生成SQL語句,,自動執(zhí)行,,使得Java程序員可以隨心所欲的使用對象編程思維來操縱數(shù)據(jù)庫。 Hibernate可以應(yīng)用在任何使用JDBC的場合,,既可以在Java的客戶端程序使用,,也可以在Servlet/JSPWeb應(yīng)用中使用,。

1.2. 什么是orm

對象關(guān)系映射(英語:Object Relation Mapping,簡稱ORM,,或O/RM,,或O/R mapping),是一種程序技術(shù),,用于實(shí)現(xiàn)面向?qū)ο缶幊陶Z言里不同類型系統(tǒng)的數(shù)據(jù)之間的轉(zhuǎn)換,。

對象-關(guān)系映射,是隨著面向?qū)ο蟮?/span>軟件開發(fā)方法發(fā)展而產(chǎn)生的,。面向?qū)ο蟮拈_發(fā)方法是當(dāng)今企業(yè)級應(yīng)用開發(fā)環(huán)境中的主流開發(fā)方法,,關(guān)系數(shù)據(jù)庫是企業(yè)級應(yīng)用環(huán)境中永久存放數(shù)據(jù)的主流數(shù)據(jù)存儲系統(tǒng)。對象和關(guān)系數(shù)據(jù)是業(yè)務(wù)實(shí)體的兩種表現(xiàn)形式,,業(yè)務(wù)實(shí)體在內(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)系映射(ORM)系統(tǒng)一般以中間件的形式存在,,主要實(shí)現(xiàn)程序?qū)ο蟮疥P(guān)系數(shù)據(jù)庫數(shù)據(jù)的映射。

ORM模型的簡單性簡化了數(shù)據(jù)庫查詢過程,。使用ORM查詢工具,,用戶可以訪問期望數(shù)據(jù),而不必理解數(shù)據(jù)庫的底層結(jié)構(gòu),。

1.3. 為什么使用hibernate框架

  • HibernateJDBC訪問數(shù)據(jù)庫的代碼做了封裝,,大大簡化了數(shù)據(jù)訪問層繁瑣的重復(fù)性代碼

  • Hibernate是一個(gè)基于jdbc的主流持久化框架,是一個(gè)優(yōu)秀的orm實(shí)現(xiàn),,它很大程度的簡化了dao層編碼工作

Hibernate是企業(yè)級開發(fā)中主流框架,。映射的靈活性很出色。它支持很多關(guān)系型數(shù)據(jù)庫

2. Hiberate框架學(xué)習(xí)目標(biāo)

掌握hibernate的基本配置

掌握hibernate常用API

掌握hibernate的關(guān)聯(lián)映射

掌握hibernate的檢索方式

掌握hibernate的優(yōu)化方式

3. Hibernate快速入門

3.1. Hibernate下載

下載后的目錄結(jié)構(gòu)

documentation目錄:存放hibernate的相關(guān)文件與API

lib目錄:存放hibernate編譯和運(yùn)行所依賴的jar包,,其中required子目錄下包含了運(yùn)行hibernate項(xiàng)目必須的jar

project目錄:存放hibernate各種相關(guān)的源代碼與資源.

lib/required目錄中,,包含的jar

3.2. 創(chuàng)建數(shù)據(jù)庫與表

CREATE DATABASE hibernateTest;
USE RhibernateTest;
CREATE TABLE t_customer(
        id INT PRIMARY KEY AUTO_INCREMENT,
        NAME VARCHAR(20),
        address VARCHAR(50)
)

3.3. 創(chuàng)建實(shí)體類

3.4. 導(dǎo)入hibernate依賴jar

導(dǎo)入lib/required下所有的jar

導(dǎo)入數(shù)據(jù)庫的驅(qū)動jar

日志相關(guān)jar

hibernate/project/etc/log4j.properties文件導(dǎo)入到工程src.

3.5. 創(chuàng)建映射文件

映射配置文件主要是用于描述實(shí)體類與數(shù)據(jù)表之間的映射關(guān)系。

位置:要與實(shí)體類在同一個(gè)包下.

名稱:類名.hbm.xml

約束:hibernate核心jar包下的org.hibernate包下hibernate-mapping-3.0.dtd文件中查找

3.6. 創(chuàng)建hibernate核心配置文件

它主要是hibernate框架所使用的,,它主要包含了連接數(shù)據(jù)庫相關(guān)信息,,hibernate相關(guān)配置等。

位置:src下創(chuàng)建一個(gè)hibernate.cfg.xml

約束:

約束文件所在位置:hiberante核心jar包下的org.hibernate包下              

在這個(gè)文件中如何配置?

可以參考 hibernate-release-5.0.7.Final\project\etc\hibernate.properties文件

3.7. 編寫測試代碼

3.8. Hibernate工作原理總結(jié)

hibernate工作原理:

1,、通過Configuration().configure();讀取并解析hibernate.cfg.xml配置文件,。
  
2、由hibernate.cfg.xml中的讀取解析映射信息,。

3,、通過config.buildSessionFactory();//得到sessionFactory

4,、sessionFactory.openSession();//得到session,。

5session.beginTransaction();//開啟事務(wù),。

6,、persistentoperate;

7session.getTransaction().commit();//提交事務(wù)

8,、關(guān)閉session;

9,、關(guān)閉sessionFactory;

4. Hibernate配置詳解

4.1. 核心配置文件配置

對于hibernate的核心配置文件它有兩種方式:

  1. hibernate.cfg.xml

  2. hibernate.properties

我們在開發(fā)中使用比較多的是hibernate.cfg.xml這種方式,原因它的配置能力更強(qiáng),,易于修改

我們主要講解的是hibernate.cfg.xml配置

1.可以加載數(shù)據(jù)庫相關(guān)信息

2.hibernate相關(guān)配置

3.加載映射配置文件

對于hibernate.cfg.xml配置文件中的內(nèi)容可以參考hibernate/project/etc/hibernate.properties的配置

配置這個(gè)屬性后,,我們可以進(jìn)行表的自動創(chuàng)建


Create-drop 每次都會創(chuàng)建一個(gè)新的表,執(zhí)行完成后刪除,。一般在測試中使用

Create   每次都會創(chuàng)建一個(gè)新的表,一般是在測試中使用

update 如果數(shù)據(jù)庫中有表,,不創(chuàng)建,沒有表創(chuàng)建,,如果映射不匹配,,會自動更新表結(jié)構(gòu)(只能添加)

validate  只會使用存在的表,并且會對映射關(guān)系進(jìn)行校驗(yàn).

 

4.2. 映射文件配置

映射配置文件它的名稱是類名.hbm.xml,,它一般放置在實(shí)體類所在的包下,。

         這個(gè)配置文件的主要作用是建立表與類的映射關(guān)系。

        

1.統(tǒng)一聲明包名,,這樣在中就不需要寫類的全名

2.關(guān)于標(biāo)簽配置

name屬性:類的全名稱

table 表的名稱,可以省略,,這時(shí)表的名稱就與類名一致
catalog屬性:數(shù)據(jù)庫名稱 可以省略.如果省略,參考核心配置文件中url路徑中的庫名稱

3.關(guān)于標(biāo)簽

首先它必須存在,。是用于建立類中的屬性與表中的主鍵映射,。

name 類中的屬性名稱

column 表中的主鍵名稱  column它也可以省略,這時(shí)列名就與類中屬性名稱一致

length 字段長度

type屬性 指定類型

它主要是描述主鍵生成策略.

4.關(guān)于標(biāo)簽

它是描述類中屬性與表中非主鍵的映射關(guān)系


關(guān)于hibernate的映射文件中類型問題

對于type屬性它的取值,,可以有三種:

  1. java中的數(shù)據(jù)類型

  2. hibernate中的數(shù)據(jù)類型

  3. SQL的數(shù)據(jù)類型

默認(rèn)是hibernate中數(shù)據(jù)類型

5. Hibernate常用API介紹

5.1. Configuration

它主要是用于加載hibernate配置.

Configuration config=newConfiguration().config(); 主要加載src下的hibernate.cfg.xml

Configuration config=new Configuration();主要加載的src下的hibernate.properties

Configuration config=newConfiguration().config(核心配置文件名稱);加載指定的名稱的配置文件

問題:我們是在hibernate.cfg.xml文件中有xxx.hbm.xml文件的位置,。如果我們使用的是hibernate.properties這種核心配置,它如何加載映射配置?

5.2. sessionFactory

首先SessionFactory它的獲取是通過Configuration得到,。

SessionFactory接口負(fù)責(zé)初始化Hibernate,。它充當(dāng)數(shù)據(jù)存儲源的代理,并負(fù)責(zé)創(chuàng)建Session對象,。這里用到了工廠模式,。需要注意的是SessionFactory并不是輕量級的,因?yàn)橐话闱闆r下,一個(gè)項(xiàng)目通常只需要一個(gè)SessionFactory就夠,,當(dāng)需要操作多個(gè)數(shù)據(jù)庫時(shí),,可以為每個(gè)數(shù)據(jù)庫指定一個(gè)SessionFactory

通過SessionFactory可以得到Session.

是從連接池中獲取一個(gè)連接,。

獲取一個(gè)與線程綁定的Session.

SessionFactory它不是輕量級的,,不要頻繁創(chuàng)建關(guān)閉它。在一個(gè)項(xiàng)目中有一個(gè)SessionFactory就可以,,通過SessionFactory來獲取Session進(jìn)行操作,。

問題:怎樣可以保證在一個(gè)項(xiàng)目中所使用的SessionFactory是同一個(gè)哪?

 

SessionFactory內(nèi)部還維護(hù)了一個(gè)連接池,如果我們要想使用c3p0連接池,,應(yīng)該怎樣處理?


1.我們要導(dǎo)入c3p0的相關(guān)jar

hibernate/lib/options下有關(guān)于c3p0連接池jar

2.在hibernate.cfg.xml文件中配置c3p0連接

可以查看etc/hibernate.properties中關(guān)于c3p0的配置

5.3. Session

Session接口負(fù)責(zé)執(zhí)行被持久化對象的CRUD操作(CRUD的任務(wù)是完成與數(shù)據(jù)庫的交流,,包含了很多常見的SQL語句)。但需要注意的是Session對象是非線程安全的,。

問題:我們?nèi)绾谓鉀Qsession的安全問題?

         我們只需要在方法內(nèi)部來使用Session就可以,。

問題:Session如何獲取到?

SessionFactory.openSession();  相當(dāng)于直接通過SessionFactory創(chuàng)建一個(gè)新的Session,使用完成后要手動調(diào)用close來關(guān)閉。

SessionFactory.getCurrentSession();獲取一個(gè)與線程綁定的Session,當(dāng)我們提交或事務(wù)回滾后會自動關(guān)閉,。

Session常用的方法:

         save  保存對象

         update修改操作

         delete刪除

         get/load根據(jù)id進(jìn)行查詢

         savenOrUpdate執(zhí)行saveupdate操作

         createQuery()獲取一個(gè)Query對象

         CreateSQLQUery()獲取一個(gè)可以操作sqlSQLQuery對象

         createCriteria()獲取一個(gè)Criteria它可以完成條件查詢

5.4. Transaction

Transaction接口主要用于管理事務(wù),,它是hibernate的事務(wù)接口,對底層的事務(wù)進(jìn)行了封裝,。使用它可以進(jìn)行事務(wù)操作,。

commit 事務(wù)提交

rollback 事務(wù)回滾

問題:如果獲取一個(gè)Transaction對象

Session.beginTransaction();

 

問題:如果在程序中沒有開啟事務(wù),是否存在事務(wù)?

有事務(wù),,session的每一個(gè)操作就會開啟一個(gè)事務(wù),。

 

默認(rèn)情況下事務(wù)是不會自動提交的。

默認(rèn)不自動提交

事務(wù)自動提交.

5.5. Query

Query接口讓你方便地對數(shù)據(jù)庫及持久對象進(jìn)行查詢,,它可以有兩種表達(dá)方式:HQL語言或本地?cái)?shù)據(jù)庫的SQL語句,。Query經(jīng)常被用來綁定查詢參數(shù)、限制查詢記錄數(shù)量,,并最終執(zhí)行查詢操作,。

通過Query主要完成查詢操作.

我們通過Query可以執(zhí)行hql語句.

Query query=Session.createQuery(hql);

下面這個(gè)可以執(zhí)行sql語句

SQLQUery sqlQuery=Session.createSQLQuery(sql);

SQLQueryQuery的子.

查詢所有操作---使用HQL

分頁查詢

查詢指定列信息

Select name ,address from Customer; 得到的是List結(jié)果

要想得到List結(jié)果

  1. Customer類中生成以name,address為參數(shù)的構(gòu)造,注意,,無參數(shù)構(gòu)造也要有,。

  2. Select newCustomer(name,address) from Customer;

條件查詢

可以使用where關(guān)鍵字

無名稱參數(shù)  from Customer where name=?

對其進(jìn)行賦值   query.setParameter(0,”張三”)

有名稱參數(shù)  from Customer where name=:myname;

對其進(jìn)行賦值  query.setParameter(“myname”,”李四”);

如果查詢結(jié)果可以保證就是唯一 的,我們可以使用

query. uniqueResult()來得到一個(gè)單獨(dú)對象.

SQLQuery

要想執(zhí)行本地sql

SQLQuery sqlQuery=session.createSqlQuery(Stringsql);

使用addEntity方法來將結(jié)果封裝到指定的對象中,,如果不封裝,,得到的是List

如果sql中有參數(shù),我們使用setParameter方法完成參數(shù)傳遞,。

如果結(jié)果就是一個(gè)可以使用uniqueResult()來得到一個(gè)單獨(dú)對象,。

5.6. Criteria

Criteria接口與Query接口非常類似,允許創(chuàng)建并執(zhí)行面向?qū)ο蟮臉?biāo)準(zhǔn)化查詢。值得注意的是Criteria接口也是輕量級的,,它不能在Session之外使用,。

首先我想使用Criteria,必須得到Criteria

Criteria criteria=Session.createCriteria()

查詢所有操作

Session.createCriteria(實(shí)體類.class)得到一個(gè)Criteria對象,,調(diào)用list查詢所有

分頁操作與query的方法一樣

setFirstResult()    setMaxResults()

條件查詢

criteria.add(Restrictions.eq(“name”,”xxxx”));

criteria.add(Restrictions.or(Restricitons.eq(),Restrictions.list()…..))

我們使用Criteria可以更加面向?qū)ο笕ゲ僮?,它非常適合進(jìn)行多條件組合查詢。

記得分享給身邊有需要的人

小編微信:xxf960326

    本站是提供個(gè)人知識管理的網(wǎng)絡(luò)存儲空間,,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn),。請注意甄別內(nèi)容中的聯(lián)系方式,、誘導(dǎo)購買等信息,謹(jǐn)防詐騙,。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,,請點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多