日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

hibernate简单应用

發(fā)布時間:2025/3/15 编程问答 16 豆豆
生活随笔 收集整理的這篇文章主要介紹了 hibernate简单应用 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

Hibernate?第二章

核心API?CURD實現(xiàn)

?

核心API介紹

單表操作方法

查詢hql語句

?

1、認識hibernate?

核心思想ORM:實現(xiàn)數(shù)據(jù)庫中的文件一一映射為java中的實體類。

使用hibernate

1)引入hibernate

2)使用相關核心配置文件:

i.?數(shù)據(jù)庫配置文件:?*.hibernate.cfg.xml

ii.?映射文件:?*.hbm.xml(描述表和列,與實體類和屬性對應關系!)

?

注意:需要使用hibernate?指定主鍵的自動實現(xiàn)方法!學名:“主鍵生成策略”

(1)native?本地,hibernate?根據(jù)不同數(shù)據(jù)庫自動選擇主鍵的生成方式

mysql,sqlserver?-->自增,oracle:序列)

(2)Identity:自增長!!使用mysql+sqlserver

(3)Sequence:適用于oracle

(4)Incrementhibernate代理生成自增主鍵

(5)Uuid:位子字符串!

(6)Assigned:表示有java單獨生成一個唯一主鍵

?

核心API

配置configuration:根啟動hibernate?,加載配置文件

SessionFactory:初始化數(shù)據(jù)源信息,一個數(shù)據(jù)源對應一個SessionFactory對象,該對象會自動分析表和實體的關系文件。大對象:創(chuàng)建和銷毀非常消耗內(nèi)存,建議一個?項目中只有1個。

SessionCURD核心對象

Transaction:事務對象(非查詢)

Query和?criteria:查詢對象

以上6類接口,criteria用的相對比較少,都存在于?org.hibernate包中。

?

【注意:SessionFactory對象是線程安全的大對象,可以被整個項目使用。Session1不能被多個方法共享。是縣城不安全的。】

?

3、sessionCURD方法。

Save(對象)新增

Update(對象)修改,該對象必須包含id

Delete(對象)刪除,該對象必須包含id

SaveOrUpdate(對象)

?

Session里面可以保存數(shù)據(jù),這時候這里面的數(shù)據(jù)叫做?一級緩存數(shù)據(jù)

SaveOrUpdate(對象)??

對象中沒設置id屬性,直接增加

對象中設置了id屬性,直接修改

?

查詢:load/get?兩種方法的區(qū)別。Id找不到的時候,get會返回一個?null

Load會出現(xiàn)Exception

調(diào)用修改方法時,有一個?臟檢查。【大多數(shù)人念做,心臟的臟。表示,重要得點進行修改,不重要的點就不再修改。】

這其實是由于更新對象的方式不正確導致的。

比如:

表中數(shù)據(jù):

User_id???user_name?user_password

1????????lifei lifei

?

User?user?=?new?User();

user.setUser_id(1);

user.setUser_name("letben");

此時調(diào)用修改方法?必然密碼項會被置成null

但是重點其實在于user_name是被改的屬性屬于核心屬性或者叫重點屬性。是一定要被修改的,但是這并不應該把密碼置空。所以這是不合理的。對于合理的方式應該是:先把用戶取出來,然后再修改。

【這個?東西老師那里今天演示也沒有實現(xiàn),所以?先不管這個我們先實現(xiàn)正確的修改方式。】

?

查詢:

使用HQL查詢語言!是一種面向對象的查詢語句

比如:查詢所有

Select?*?from?表名?where...

From?實體對象名??where...

使用query?對象,查詢語句必須按照面向對象的寫法。

From?類名?where?屬性=值。。。

動態(tài)修改?命令

Dynamic-update="true",在對應關系文件中的class?標簽內(nèi)添加【不過并未實現(xiàn)】

?

查詢完整語法:

From?類名?as?別名?where?別名.屬性=...

Oeder?by?desc/asc

Group?by....

Having...

?

查詢固定列

Select?別名.屬性1,別名.屬性2?from

類名?as?別名?where?條件...

查詢方法

獲得列表?list();【常用】

Iterator();【應用較少】

區(qū)別:list直接從數(shù)據(jù)庫中查詢數(shù)據(jù),生成1sql。而迭代器會先從數(shù)據(jù)庫中查詢出所有的主鍵列id,使用時,優(yōu)先從內(nèi)存(緩存)中查找數(shù)據(jù),只有當找不到數(shù)據(jù)時才回去數(shù)據(jù)庫中進行查詢。

具體使用哪一條語句,取決于數(shù)據(jù)量的大小,一般5m作為一個標識。5m以內(nèi)都是可以使用list()當數(shù)據(jù)量大于5m的時候建議使用iterator().但是一般情況下都適用list().因為我們一般在查詢的時候會使用分頁,所以?還是?查詢的數(shù)據(jù)量很小。一般都不會用到這個?iterator().5m是一個?很龐大的數(shù)字,可以算一下5m的漢字量應該有多大。一個漢字兩個字節(jié)。是兩個byte1024byte=1kb1024kb=1mb?5m=5120kb=5120*1024byte/2=2621440個漢字。

?

Hibernate?注入變量值

?或?:別名

From?TblUser?u?where?u.uname=?

From?TblUser?u?where?u.uname=:別名

?

分頁查詢

setFirstResult(開始位置)

setMaxResults(每頁條數(shù))

開始位置=(當前頁-1*?每頁條數(shù)

?

?

第二天

?

2016.1.4?hibernate?的復習鞏固

?

說實話這樣定義的話,就基本上就可以不管之前周哥講的東西了,只要跟緊華哥就行。

?

框架:

?

什么是框架?

把一部分能夠完成某種特定功能的代碼封裝到一部分類中,這些類之間有一定的關聯(lián)關系。把這些具有關聯(lián)關系的類稱作框架。

Hibernate:持久層框架,封裝的是jdbc的代碼,用來連接數(shù)據(jù)庫。

持久層?持久化?

持久化,就是?把原來只在內(nèi)存里面的東西寫到硬盤上,使之掉電不消失。這樣的過程稱作持久化。完成這樣功能的代碼稱作持久層。

有人引入了中間件。

中間件的范圍很廣。用于連接java代碼和數(shù)據(jù)庫的橋梁,屏蔽了數(shù)據(jù)庫的細節(jié)的hibernate就可以稱作是一個中間件。是凡具有這樣通用型功能的屏蔽了一定的細節(jié),使之更加簡化方便的java類們,就可以稱作中間件。中間件的存在也恰恰是因為可以讓操作更加平滑。才能夠光為人們使用。雖然中間件并不一定更加簡單。但是流行起來的中間件一定是可以簡化人們操作的。

?

Orm:編程思想

Object?relation?mapping?對象關系映射。

兩個方面:

一方面是指:抽象的類和數(shù)據(jù)表之間的對應關系

另一方面是:具體的類的對象和數(shù)據(jù)表中一條元組之間的對應關系。

?

?

搭建Hibernate的框架的環(huán)境:

1、映射關系,javabean類,映射文件,*.hbm.xml

2、創(chuàng)建一個hibernate的核心配置文件,(連接數(shù)據(jù)庫參數(shù),hibernate的屬性配置,加載映射文件)

3、創(chuàng)建數(shù)據(jù)庫會話(session),session這個對象上,擁有對數(shù)據(jù)庫操作的各種方法(鏈接,事務管理,提供在映射關系的基礎之上)。

4、加載hibernate配置信息的方式有三種:

1)Xml

2)硬編碼形式,就是生寫一套鏈接方式。

3)屬性文件

?

主鍵生成策略

Hibernate?中?操作的對象的狀態(tài)變化:新生態(tài)(瞬態(tài))、托管?、持久態(tài)、游離態(tài)(脫管)。

Hibernate?關系映射。一對一,一對多,多對一,多對對,繼承映射。

?

不能故步自封,要更多的理解其中的精妙,視圖自己寫一個真正的框架,我其實只是剛剛走了一步。比如dom4j還有??很多內(nèi)容都沒有完成。需要更加仔細的練習今天的內(nèi)容,才能知道日后框架需要的其他內(nèi)容。

Getload的區(qū)別除了之前說過的在當查找結果,沒有找到對應對象時,load會報異常而get方法返回null以外。還有一點就是:load是延時加載,當這條結果被用到的時候,才會去加載,如果這個結果沒有用到,就不會加載,最明顯的點在于是否會生成對應的sql語句。執(zhí)行get語句時,會立刻生成sql語句,并且執(zhí)行然后輸出結果。在配置對應的hibernate時候,的class位置時,如果設置了這樣一個屬性:lazy="false"?那么get方法就等效與load方法,在是否延遲這個問題上。當繼續(xù)考慮到空值查詢時,依然延續(xù)之前的。查詢結果返回方式。

?

?

第三天:

復習:

1、hibernate?鏈接數(shù)據(jù)庫?jdbc?的通用持久化框架

2、Orm映射思想?的這樣一種封裝的概念。主要包括抽象層面的類和表的對應,以及該類的一個對象和具體的一條元組之間的對應關系。

3、Hibernate操作的是對象

4、Hibernate?包括什么:session?的會話:鏈接,事務管理,操作數(shù)據(jù)表的各種方法

5、Hibernate?環(huán)境的搭建:

Po類?和映射文件:?hibernate.cfg.xml??hibernateUtil???configuration

6、加載配置信息的方式1xml??【這里需要注意一點,如果?這個?映射配置文件的名稱就是:hibernate.cfg.xml?的話,在程序的??configuration.configure([這里面就可以什么都不寫]);如果全局映射文件改名為:?hibernate23.cfg.xml?在程序的configuration.configure("hibernate23.cfg.xml");】?2、?硬編碼???3、屬性文件

7、對應對象的狀態(tài):?新生狀態(tài)(瞬態(tài))?托管?持久化?游離態(tài)(脫管)

舉例:當一個對象創(chuàng)建之后,還沒有調(diào)用具體dao層的方法時,該對象處于新生狀態(tài)也叫瞬態(tài),隨后調(diào)用dao層的添加方法,創(chuàng)建session對象,在執(zhí)行session.Save(對象)的方法時,處于托管狀態(tài),之后調(diào)用transaction.commit()此時對象處于持久化狀態(tài),當session.close()后,對象處于游離態(tài)。

8、get?load?方法之間的區(qū)別?

getload兩個方法都作為根據(jù)對象id查詢一個?元組的方法,區(qū)別表現(xiàn)在:(對于單表:)當利用get方法進行查詢時,會立即生成一條查詢語句,并進行查詢。無論該對象是否會被使用。當利用load方法進行查詢時,只有當查到的結果被使用時,才會生成查詢語句并進行查找,也就是說,load方法在獲得對象時,存在延遲加載的狀況。【如果,提前關閉了session,會報出?session?is?already?closed的異常。】但是這種方式會更加高效,因為他并不會占用更多的內(nèi)存資源,比起get方法?load中加載到的內(nèi)容會在內(nèi)存中留存時間更短。弊端在于一旦該對象不存在會報出異常。這是我們不希望看到的。【這種加載延遲可以通過在??*.hbm.xml的配置文件的class標簽中通過?設置?lazy="false",來取消。】當能夠查到結果時,是這樣,如果查詢不到結果時:get方法會返回null,load?會返回exception

當對于多表進行查詢時,等我今天做完實驗,在補充到這里面。多表查詢時,get也會存在延遲。

實驗算是做完了,當比如我們查詢員工的時候,使用get方法和?load方法兩者是有區(qū)別的,get方法無論后面是否使用這個信息,都會生成sql語句,也就是?立即執(zhí)行,如果是使用load方法,如果后面使用這條信息,才會生成對應的sql語句,進行查詢,也就是存在延遲加載的情況。此時,會有另外一個情況【此時要去員工類里面關閉對應的toString()方法。否則看不到效果】hibernate出于安全性的考慮,即使利用get方法,去查詢員工信息,也不會得到對應的查詢部門的語句。【如果tostring()方法要求得到部門信息就怎么樣都會執(zhí)行,也就看不到效果了。】這就是get方法在多表聯(lián)查中的“犯懶”現(xiàn)象,這?是處于安全性的考慮。這種現(xiàn)象是可以遏制的。也是通過配置lazy,如果設置lazy=false”也就是?查詢語句會立即執(zhí)行。在查詢到員工后,會立即對部門的信息進行查詢,在配置的時候通過員工查詢到部門打出lazy后給出的聯(lián)想是false?也就是多對一的時候是幫助得到那一個部門的,但是一對多的時候,打出lazy之后給出的聯(lián)想是true也就是?如果要查詢更多的數(shù)據(jù),也就是一對多的時候是不希望你查到結果的。但是都可以配置為false。只是在配置的時候hibernate希望你按照他的方式進行配置。

9、一對多?多對一??單向關聯(lián)映射?和雙向關聯(lián)映射。

10、級聯(lián)?:?級聯(lián)新增?和?級聯(lián)刪除?(級聯(lián)刪除還有一些問題)

11、一對一?多對多

12、符合主鍵映射,符合主鍵類的映射

13、對于普通屬性的?細粒度劃分

14、明天會講?繼承映射?和hql

所以今天的重點主要在?這些類的映射配置文件上面。

?

然后po?是真實的對應一個?表的實體類。

vo?是只面對?展示或者?中間存儲的?視圖類。

兩者都是?javabean對象?區(qū)別在于?是否真實對應一個?表。

?

每個Hibernate?session的基本操作?-?包括?persist(),?merge(),?saveOrUpdate(),?delete(),?lock(),?refresh(),?evict(),?replicate()?-?都有對應的級聯(lián)風格(cascade?style)。?這些級聯(lián)風格(cascade?style)風格分別命名為?create,?merge,?save-update,?delete,?lock,?refresh,?evict,?replicate。?如果你希望一個操作被順著關聯(lián)關系級聯(lián)傳播,你必須在映射文件中指出這一點。

?

添加新的員工時,如果部門是新的,那就需要設置級聯(lián),如果部門是之前得到的,那就不需要級聯(lián)。

?

老師是班級的老師,班級是老師的班級,這種邏輯屬于多對多,如果單純這么生連,一條記錄都插不進去,所以多對多的關系必然有中間表的存在。

?

第四天:

查詢:

1、session會話對象中提供,直接查詢方法?get?load

2、表轉化查詢

3、HQL

4、Sql

?

好吧?今天主要看例子。昨天的還有內(nèi)容沒有完成,今天的內(nèi)容也有部分沒有完善。

?

轉載于:https://www.cnblogs.com/letben/p/5185894.html

總結

以上是生活随笔為你收集整理的hibernate简单应用的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 国产操女人 | 日韩av视屏 | 亚洲成人av免费 | 黄色大片在线看 | 国产精品11 | 国产深喉视频一区二区 | 奇米影视在线视频 | 日本毛片视频 | 5d肉蒲团之性战奶水 | 超碰在线人人干 | 2018中文字幕在线观看 | 亚洲图片小说视频 | 97成人在线视频 | 男生插女生视频在线观看 | 别揉我奶头一区二区三区 | 麻豆精品a∨在线观看 | 成人三级做爰av | 成年人视频在线免费观看 | 日韩精品偷拍 | 91九色在线 | 男女羞羞动态图 | 色黄大色黄女片免费中国 | 99热成人 | 免费的av| 人妻精品久久久久中文字幕 | 日本韩国欧美一区 | 精品人伦一区二区 | 日本亚洲网站 | 视频在线观看电影完整版高清免费 | 亚洲免费在线视频 | 天天干天天舔天天操 | 在哪里可以看毛片 | 女同中文字幕 | 国产女主播在线播放 | 波多野结衣二区三区 | 黄色一大片 | 综合xx网| 国产一区二区亚洲 | 成人黄色av网站 | 亚洲免费自拍 | 五月综合久久 | 亚洲视频一二三 | 日本免费网站视频 | 青青青青在线 | 国产精品传媒视频 | 国产精品视频一区二区三区 | 天堂在线 | 亚洲成人午夜在线 | 久久99久久99精品免视看婷婷 | 精品国产一级久久 | 婷婷丁香花五月天 | 欧美zozo| 我想看毛片 | 一个色综合久久 | 激情小视频 | 日韩精品av一区二区三区 | 亚洲免费一区 | 国产第20页| 免费爱爱网站 | 国产精品久久久久久久久久久免费看 | 青青偷拍视频 | 日韩一级二级三级 | 少妇太爽了| 公侵犯人妻一区二区 | 青草视屏 | 剧情av在线 | 岛国av在线 | 亚洲青涩网 | 粉嫩av一区二区三区免费观看 | 国产美女裸体无遮挡免费视频 | 色哟哟中文字幕 | 黄色视屏软件 | 激情四射综合网 | 久久久99精品免费观看 | 天天做天天射 | 国产精品男人的天堂 | 国产美女性生活 | 牛牛在线视频 | 999这里只有精品 | 精品乱码一区二区三区四区 | 国产精品系列在线播放 | 91嫩草网 | 黄色免费片 | 麻豆啪啪| 国产乱码精品一区二区三区五月婷 | 麻豆爱爱 | 人人妻人人澡人人爽人人精品 | 欧美综合在线观看 | 国产乱码精品1区2区3区 | 精品久久久999 | 91香蕉在线看 | av免费久久 | 免费一级毛片麻豆精品 | 久久久久久久久久久久久久久 | 91一区二区三区在线 | 精品久久久国产 | 超碰在线免费播放 | 免费中文字幕在线观看 | 三级在线网址 |