真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

關(guān)于java持久層面試題匯總

今天小編給大家總結(jié)了關(guān)于java持久層面試題匯總,下面一起來(lái)看看吧。

創(chuàng)新互聯(lián)是一家專業(yè)從事成都網(wǎng)站建設(shè)、成都做網(wǎng)站、網(wǎng)頁(yè)設(shè)計(jì)的品牌網(wǎng)絡(luò)公司。如今是成都地區(qū)具影響力的網(wǎng)站設(shè)計(jì)公司,作為專業(yè)的成都網(wǎng)站建設(shè)公司,創(chuàng)新互聯(lián)依托強(qiáng)大的技術(shù)實(shí)力、以及多年的網(wǎng)站運(yùn)營(yíng)經(jīng)驗(yàn),為您提供專業(yè)的成都網(wǎng)站建設(shè)、營(yíng)銷型網(wǎng)站建設(shè)及網(wǎng)站設(shè)計(jì)開發(fā)服務(wù)!

關(guān)于java持久層面試題匯總

1、解釋一下MyBatis中命名空間(namespace)的作用。

在大型項(xiàng)目中,可能存在大量的SQL語(yǔ)句,這時(shí)候?yàn)槊總€(gè)SQL語(yǔ)句起一個(gè)唯一的標(biāo)識(shí)(ID)就變得并不容易了。為了解決這個(gè)問題,在MyBatis中,可以為每個(gè)映射文件起一個(gè)唯一的命名空間,這樣定義在這個(gè)映射文件中的每個(gè)SQL語(yǔ)句就成了定義在這個(gè)命名空間中的一個(gè)ID。

只要我們能夠保證每個(gè)命名空間中這個(gè)ID是唯一的,即使在不同映射文件中的語(yǔ)句ID相同,也不會(huì)再產(chǎn)生沖突了。

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

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

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

3、Session的save()、update()、merge()、lock()、saveOrUpdate()和persist()方法分別是做什么的?有什么區(qū)別? 
 Hibernate的對(duì)象有三種狀態(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()將會(huì)引發(fā)SQL的INSERT語(yǔ)句,而update()或merge()會(huì)引發(fā)UPDATE語(yǔ)句。

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

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

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

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

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

4、闡述Session加載實(shí)體對(duì)象的過程。 
 1、Session在調(diào)用數(shù)據(jù)庫(kù)查詢功能之前,首先會(huì)在一級(jí)緩存中通過實(shí)體類型和主鍵進(jìn)行查找,如果一級(jí)緩存查找命中且數(shù)據(jù)狀態(tài)合法,則直接返回; 
 2、如果一級(jí)緩存沒有命中,接下來(lái)Session會(huì)在當(dāng)前NonExists記錄(相當(dāng)于一個(gè)查詢黑名單,如果出現(xiàn)重復(fù)的無(wú)效查詢可以迅速做出判斷,從而提升性能)中進(jìn)行查找,如果NonExists中存在同樣的查詢條件,則返回null; 
 3、如果一級(jí)緩存查詢失敗查詢二級(jí)緩存,如果二級(jí)緩存命中直接返回; 
 4、如果之前的查詢都未命中,則發(fā)出SQL語(yǔ)句,如果查詢未發(fā)現(xiàn)對(duì)應(yīng)記錄則將此次查詢添加到Session的NonExists中加以記錄,并返回null; 
 5、根據(jù)映射配置和SQL語(yǔ)句得到ResultSet,并創(chuàng)建對(duì)應(yīng)的實(shí)體對(duì)象; 
 6、將對(duì)象納入Session(一級(jí)緩存)的管理; 
 7、如果有對(duì)應(yīng)的攔截器,則執(zhí)行攔截器的onLoad方法; 
  8、如果開啟并設(shè)置了要使用二級(jí)緩存,則將數(shù)據(jù)對(duì)象納入二級(jí)緩存; 
 9、返回?cái)?shù)據(jù)對(duì)象。

5、MyBatis中使用#和$書寫占位符有什么區(qū)別? 
 #將傳入的數(shù)據(jù)都當(dāng)成一個(gè)字符串,會(huì)對(duì)傳入的數(shù)據(jù)自動(dòng)加上引號(hào);

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

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

6、解釋一下MyBatis中命名空間(namespace)的作用。 
 在大型項(xiàng)目中,可能存在大量的SQL語(yǔ)句,這時(shí)候?yàn)槊總€(gè)SQL語(yǔ)句起一個(gè)唯一的標(biāo)識(shí)(ID)就變得并不容易了。為了解決這個(gè)問題,在MyBatis中,可以為每個(gè)映射文件起一個(gè)唯一的命名空間,這樣定義在這個(gè)映射文件中的每個(gè)SQL語(yǔ)句就成了定義在這個(gè)命名空間中的一個(gè)ID。只要我們能夠保證每個(gè)命名空間中這個(gè)ID是唯一的,即使在不同映射文件中的語(yǔ)句ID相同,也不會(huì)再產(chǎn)生沖突了。

以上就是關(guān)于java持久層面試題匯總的詳細(xì)內(nèi)容,更多請(qǐng)關(guān)注創(chuàng)新互聯(lián)其它相關(guān)文章!


當(dāng)前名稱:關(guān)于java持久層面試題匯總
文章轉(zhuǎn)載:http://weahome.cn/article/jsochh.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部