有完整的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.1.什么是hibernateHibernate是一個(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/JSP的Web應(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框架
Hibernate是企業(yè)級開發(fā)中主流框架,。映射的靈活性很出色。它支持很多關(guān)系型數(shù)據(jù)庫 掌握hibernate的基本配置 掌握hibernate常用API 掌握hibernate的關(guān)聯(lián)映射 掌握hibernate的檢索方式 掌握hibernate的優(yōu)化方式 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; 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配置文件,。 3,、通過config.buildSessionFactory();//得到sessionFactory。 4,、sessionFactory.openSession();//得到session,。 5、session.beginTransaction();//開啟事務(wù),。 6,、persistentoperate; 7、session.getTransaction().commit();//提交事務(wù) 8,、關(guān)閉session; 9,、關(guān)閉sessionFactory; 對于hibernate的核心配置文件它有兩種方式: hibernate.cfg.xml 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). 映射配置文件它的名稱是類名.hbm.xml,,它一般放置在實(shí)體類所在的包下,。 這個(gè)配置文件的主要作用是建立表與類的映射關(guān)系。 1.統(tǒng)一聲明包名,,這樣在 2.關(guān)于 name屬性:類的全名稱 table 表的名稱,可以省略,,這時(shí)表的名稱就與類名一致 3.關(guān)于 首先它必須存在,。 name 類中的屬性名稱 column 表中的主鍵名稱 column它也可以省略,這時(shí)列名就與類中屬性名稱一致 length 字段長度 type屬性 指定類型 4.關(guān)于 它是描述類中屬性與表中非主鍵的映射關(guān)系 關(guān)于hibernate的映射文件中類型問題 對于type屬性它的取值,,可以有三種: java中的數(shù)據(jù)類型 hibernate中的數(shù)據(jù)類型 SQL的數(shù)據(jù)類型 默認(rèn)是hibernate中數(shù)據(jù)類型 它主要是用于加載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這種核心配置,它如何加載映射配置? 首先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的配置 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í)行save或update操作 createQuery()獲取一個(gè)Query對象 CreateSQLQUery()獲取一個(gè)可以操作sql的SQLQuery對象 createCriteria()獲取一個(gè)Criteria它可以完成條件查詢 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ù)自動提交. 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); SQLQuery是Query的子. Select name ,address from Customer; 得到的是List 記得分享給身邊有需要的人 小編微信:xxf960326 |
|