av一区二区在线观看_亚洲男人的天堂网站_日韩亚洲视频_在线成人免费_欧美日韩精品免费观看视频_久草视

您的位置:首頁技術(shù)文章
文章詳情頁

java關(guān)于持久層面試題目整理

瀏覽:6日期:2022-09-04 14:30:33

一、什么是ORM?

對象關(guān)系映射(Object-Relational Mapping,簡稱ORM)是一種為了解決程序的面向?qū)ο竽P团c數(shù)據(jù)庫的關(guān)系模型互不匹配問題的技術(shù);

簡單的說,ORM是通過使用描述對象和數(shù)據(jù)庫之間映射的元數(shù)據(jù)(在Java中可以用XML或者是注解),將程序中的對象自動持久化到關(guān)系數(shù)據(jù)庫中或者將關(guān)系數(shù)據(jù)庫表中的行轉(zhuǎn)換成Java對象,其本質(zhì)上就是將數(shù)據(jù)從一種形式轉(zhuǎn)換到另外一種形式。

二、Hibernate中SessionFactory是線程安全的嗎?Session是線程安全的嗎(兩個(gè)線程能夠共享同一個(gè)Session嗎)?

SessionFactory對應(yīng)Hibernate的一個(gè)數(shù)據(jù)存儲的概念,它是線程安全的,可以被多個(gè)線程并發(fā)訪問。SessionFactory一般只會在啟動的時(shí)候構(gòu)建。對于應(yīng)用程序,最好將SessionFactory通過單例模式進(jìn)行封裝以便于訪問。

Session是一個(gè)輕量級非線程安全的對象(線程間不能共享session),它表示與數(shù)據(jù)庫進(jìn)行交互的一個(gè)工作單元。Session是由SessionFactory創(chuàng)建的,在任務(wù)完成之后它會被關(guān)閉。Session是持久層服務(wù)對外提供的主要接口。

Session會延遲獲取數(shù)據(jù)庫連接(也就是在需要的時(shí)候才會獲取)。為了避免創(chuàng)建太多的session,可以使用ThreadLocal將session和當(dāng)前線程綁定在一起,這樣可以讓同一個(gè)線程獲得的總是同一個(gè)session。Hibernate 3中SessionFactory的getCurrentSession()方法就可以做到。

三、Session的save()、update()、merge()、lock()、saveOrUpdate()和persist()方法分別是做什么的?有什么區(qū)別?

Hibernate的對象有三種狀態(tài):瞬時(shí)態(tài)(transient)、持久態(tài)(persistent)和游離態(tài)(detached)。

瞬時(shí)態(tài)的實(shí)例可以通過調(diào)用save()、persist()或者saveOrUpdate()方法變成持久態(tài);

游離態(tài)的實(shí)例可以通過調(diào)用 update()、saveOrUpdate()、lock()或者replicate()變成持久態(tài)。save()和persist()將會引發(fā)SQL的INSERT語句,而update()或merge()會引發(fā)UPDATE語句。

save()和update()的區(qū)別在于一個(gè)是將瞬時(shí)態(tài)對象變成持久態(tài),一個(gè)是將游離態(tài)對象變?yōu)槌志脩B(tài)。merge()方法可以完成save()和update()方法的功能,它的意圖是將新的狀態(tài)合并到已有的持久化對象上或創(chuàng)建新的持久化對象。

對于persist()方法,按照官方文檔的說明:

1、persist()方法把一個(gè)瞬時(shí)態(tài)的實(shí)例持久化,但是并不保證標(biāo)識符被立刻填入到持久化實(shí)例中,標(biāo)識符的填入可能被推遲到flush的時(shí)間;

2、persist()方法保證當(dāng)它在一個(gè)事務(wù)外部被調(diào)用的時(shí)候并不觸發(fā)一個(gè)INSERT語句,當(dāng)需要封裝一個(gè)長會話流程的時(shí)候,persist()方法是很有必要的;

3、save()方法不保證第2條,它要返回標(biāo)識符,所以它會立即執(zhí)行INSERT語句,不管是在事務(wù)內(nèi)部還是外部。至于lock()方法和update()方法的區(qū)別,update()方法是把一個(gè)已經(jīng)更改過的脫管狀態(tài)的對象變成持久狀態(tài);lock()方法是把一個(gè)沒有更改過的脫管狀態(tài)的對象變成持久狀態(tài)。

四、闡述Session加載實(shí)體對象的過程

1、Session在調(diào)用數(shù)據(jù)庫查詢功能之前,首先會在一級緩存中通過實(shí)體類型和主鍵進(jìn)行查找,如果一級緩存查找命中且數(shù)據(jù)狀態(tài)合法,則直接返回;

2、如果一級緩存沒有命中,接下來Session會在當(dāng)前NonExists記錄(相當(dāng)于一個(gè)查詢黑名單,如果出現(xiàn)重復(fù)的無效查詢可以迅速做出判斷,從而提升性能)中進(jìn)行查找,如果NonExists中存在同樣的查詢條件,則返回null;

3、如果一級緩存查詢失敗查詢二級緩存,如果二級緩存命中直接返回;

4、如果之前的查詢都未命中,則發(fā)出SQL語句,如果查詢未發(fā)現(xiàn)對應(yīng)記錄則將此次查詢添加到Session的NonExists中加以記錄,并返回null;

5、根據(jù)映射配置和SQL語句得到ResultSet,并創(chuàng)建對應(yīng)的實(shí)體對象;

6、將對象納入Session(一級緩存)的管理;

7、如果有對應(yīng)的攔截器,則執(zhí)行攔截器的onLoad方法;

8、如果開啟并設(shè)置了要使用二級緩存,則將數(shù)據(jù)對象納入二級緩存;

9、返回?cái)?shù)據(jù)對象。

五、MyBatis中使用#和$書寫占位符有什么區(qū)別?

#將傳入的數(shù)據(jù)都當(dāng)成一個(gè)字符串,會對傳入的數(shù)據(jù)自動加上引號;

$將傳入的數(shù)據(jù)直接顯示生成在SQL中。

注意:使用$占位符可能會導(dǎo)致SQL注射攻擊,能用#的地方就不要使用$,寫order by子句的時(shí)候應(yīng)該用$而不是#。

內(nèi)容補(bǔ)充:

JDBC編程有哪些不足之處,MyBatis是如何解決這些問題的?

● JDBC:數(shù)據(jù)庫鏈接創(chuàng)建、釋放頻繁造成系統(tǒng)資源浪費(fèi)從而影響系統(tǒng)性能,如果使用數(shù)據(jù)庫鏈接池可解決此問題。

MyBatis:在SqlMapConfig.xml中配置數(shù)據(jù)鏈接池,使用連接池管理數(shù)據(jù)庫鏈接。

● JDBC:Sql語句寫在代碼中造成代碼不易維護(hù),實(shí)際應(yīng)用sql變化的可能較大,sql變動需要改變java代碼。

MyBatis:將Sql語句配置在XXXXmapper.xml文件中與java代碼分離。

● JDBC:向sql語句傳參數(shù)麻煩,因?yàn)閟ql語句的where條件不一定,可能多也可能少,占位符需要和參數(shù)一一對應(yīng)。

MyBatis: Mybatis自動將java對象映射至sql語句。

● JDBC:對結(jié)果集解析麻煩,sql變化導(dǎo)致解析代碼變化,且解析前需要遍歷,如果能將數(shù)據(jù)庫記錄封裝成pojo對象解析比較方便。

MyBatis:Mybatis自動將sql執(zhí)行結(jié)果映射至java對象。

到此這篇關(guān)于java關(guān)于持久層面試題目整理的文章就介紹到這了,更多相關(guān)java持久層面試題目內(nèi)容請搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!

標(biāo)簽: Java
相關(guān)文章:
主站蜘蛛池模板: 伊人国产精品 | 日韩欧美中文在线 | 精品三级在线观看 | 中文字幕精品视频在线观看 | 精品欧美一区二区三区免费观看 | 成人免费在线视频 | 国产精品视频一区二区三区不卡 | 国产综合精品一区二区三区 | 日韩三区在线 | 久久国产成人 | 国产成人精品久久 | 国产精品欧美精品日韩精品 | 欧州一区二区三区 | 成人av一区 | 久久婷婷国产麻豆91 | 国产激情视频在线观看 | 99久久精品免费看国产高清 | 国内自拍偷拍视频 | 国产精品一区二区久久 | 国产精品人人做人人爽 | 亚洲国产精品99久久久久久久久 | 日本久久久久久 | 久久综合久 | 毛片免费看 | 涩涩视频在线观看 | 国产精品亚洲片在线播放 | 一区二区免费 | 久久99国产精一区二区三区 | 亚洲综合色视频在线观看 | 人妖videosex高潮另类 | 91久久精品一区二区二区 | 日韩日韩日韩日韩日韩日韩日韩 | 91天堂 | 中文字幕国产精品 | 国产欧美日韩二区 | 久久精品女人天堂av | 在线久草| 国产精品a一区二区三区网址 | 成人av网站在线观看 | 爱爱视频日本 | 亚洲超碰在线观看 |