Java-Web之三大框架試題(SSH)_第1頁(yè)
Java-Web之三大框架試題(SSH)_第2頁(yè)
Java-Web之三大框架試題(SSH)_第3頁(yè)
Java-Web之三大框架試題(SSH)_第4頁(yè)
Java-Web之三大框架試題(SSH)_第5頁(yè)
已閱讀5頁(yè),還剩19頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、 Java 三大框架期末復(fù)習(xí)試題 大學(xué)準(zhǔn)備期末復(fù)習(xí)以及準(zhǔn)備職業(yè)面試之用本資料有齊全的選擇題,簡(jiǎn)單題,編程題;絕對(duì)實(shí)用;Hibernate部分一、單選題 (共50題,每題2分)1下面不屬于持久化的是( a)。A把對(duì)象轉(zhuǎn)換為字符串的形式通過(guò)網(wǎng)絡(luò)傳輸,在另一端接收到這個(gè)字符串后能把對(duì)象還原出來(lái)B把程序數(shù)據(jù)從數(shù)據(jù)庫(kù)中讀出來(lái)C從XML配置文件中讀取程序的配置信息D把程序數(shù)據(jù)保存為文件2下面(a )不屬于關(guān)系對(duì)象映射的映射信息。A程序包名到數(shù)據(jù)庫(kù)庫(kù)名的映射B程序類名到數(shù)據(jù)庫(kù)表名的映射C實(shí)體屬性名到數(shù)據(jù)庫(kù)表字段的映射D實(shí)體屬性類型到數(shù)據(jù)庫(kù)表字段類型的映射3下面( ab)不是Hibernate 映射文件中包含

2、的內(nèi)容。(選兩項(xiàng))A數(shù)據(jù)庫(kù)連接信息BHibernate 屬性參數(shù)C主鍵生成策略D屬性數(shù)據(jù)類型4下面的程序執(zhí)行后沒(méi)有報(bào)錯(cuò),但數(shù)據(jù)總保存不到數(shù)據(jù)庫(kù),最可能的原因是(d )。public static void main(String args) SessionFactory sf =new Configuration().configure().buildSessionFactory();Session session = sf.openSession();Medal medal = new Medal();medal.setOwner(Shen Baozhi);medal.setSport(Ta

3、ble Tennis-Womens Singles);medal.setType(Gold Medal);session.save(user);session.close();A配置文件配置有誤B沒(méi)有在配置文件中包含對(duì)映射文件的聲明C映射文件配置有誤D沒(méi)有開(kāi)啟事務(wù)5下列屬于多對(duì)一關(guān)系的是(bd )。(選兩項(xiàng))A書(shū)和作者B手機(jī)和生產(chǎn)廠家C用戶和發(fā)布的出租信息D士兵和班長(zhǎng)6下面是某系統(tǒng)中的兩個(gè)實(shí)體類,依此可以得知(b )。public class Wage /月工資實(shí)體類private Long wid;private String empName; /雇員姓名private String mon

4、th; /月份/Getter & Setterpublic class WageItem /工資項(xiàng)private Wage wage;private Long iid;private String itemName; /項(xiàng)目名稱,如基本工資、職位津貼等private String amount; /數(shù)額/Getter & SetterAWage 和WageItem 間存在單向一對(duì)多的關(guān)聯(lián)BWage 和WageItem 間存在單向多對(duì)一的關(guān)聯(lián)CWage 和WageItem間存在雙向一對(duì)多的關(guān)聯(lián)DWage 和WageItem間存在雙向多對(duì)一的關(guān)聯(lián)7 兩實(shí)體類代碼如下:public class Wa

5、ge /月工資實(shí)體類private Long wid;private String empName; /雇員姓名private String month; /月份/Getter & Setterpublic class WageItem /工資項(xiàng)private Wage wage;private Long iid;private String itemName; /項(xiàng)目名稱,如基本工資、職位津貼等private String amount; /數(shù)額/Getter & Setter其中的WageItem 實(shí)體類有如下配置,其中空白處應(yīng)填入的代碼是( a)。class name=WageItem

6、table=fin_wage_item_ABCD8已知系統(tǒng)中TBL_USER 表對(duì)應(yīng)的實(shí)體類是TblUser,下列HQL 語(yǔ)句中正確的是( )。Afrom Tbl_UserBselect * from tbluserCselect TblUser from TblUserDfrom TblUser t where t.age= 159對(duì)下面代碼中存在的錯(cuò)誤,說(shuō)法不正確的是(d )。String hql = from TblUser u where u.status = status ;/Query query = session.createQuery();/query.setNamedPar

7、ameter(:status,);/return query.executeQuery(hql);/A第一行中的命名參數(shù)“status”應(yīng)該是“:status”B第二行createQuery 函數(shù)應(yīng)該傳入hql 作為參數(shù)C第三行命名參數(shù)名稱“:status”應(yīng)該是“status”D第四行應(yīng)該是“return query.list(hql);”10下面代碼的執(zhí)行效果是( c)。String hql = from TblStudent s order by s.score asc;Query query = session.createQuery(hql);query.setFirstResult

8、(0);query.setMaxResults(5);return query.list();A返回分?jǐn)?shù)最高的五個(gè)學(xué)生B返回分?jǐn)?shù)最高的六個(gè)學(xué)生C返回分?jǐn)?shù)最低的五個(gè)學(xué)生D返回分?jǐn)?shù)最低的六個(gè)學(xué)生11.下面HQL語(yǔ)句的含義是( D)。select stufrom TblStudent stuwhere stu.score ( select avg(score) from TblStudent )A查詢所有學(xué)生的平均分B查詢得分大于平均分的學(xué)生的成績(jī)C查詢得分最高的學(xué)生D查詢得分大于平均分的學(xué)生12.假設(shè)對(duì)Customer 類的orders 集合采用延遲檢索策略,編譯或運(yùn)行以下程序,會(huì)出現(xiàn)(C )Se

9、ssion session=sessionFactory.openSession();Customer customer=(Customer)session.get(Customer.class,new Long(1);session.close();Iterator orderIterator=customer.getOrders().iterator();A編譯出錯(cuò)B編譯通過(guò),并正常運(yùn)行C編譯通過(guò),但運(yùn)行時(shí)拋出異常D. 運(yùn)行時(shí)輸出“session.open”13選出不是Expression方法的選項(xiàng)(DAeq()Bgt()Clike()DisNULL()14與下面代碼效果相同的HQL 語(yǔ)句

10、是(A )。Criteria criteria = session.createCriteria(User.class);criteria.add(Restrictions.like(name,admin%);List result = criteria.list();Afrom User where name like admin%Bfrom User where name like %admin%Cfrom name where Restrictions like admin%Dselect from Useras u where u. Restrictions like a

11、dmin%15執(zhí)行下面代碼返回的結(jié)果為( A)。Criteria criteria = session.createCriteria(User.class);criteria.addOrder(Order.desc(id);List result = criteria.list();A以id降序排列的User對(duì)象列表B以id升序排列的User對(duì)象列表C返回Order為id的User對(duì)象的列表D不返回對(duì)象16下面代碼能夠返回房屋表中第51行數(shù)據(jù)后的20 行數(shù)據(jù)的是(B )。ACriteria criteria = session.createCriteria(House.class);Crite

12、ria.setFirstResult(51);List result = criteria.list();BCriteria criteria = session.createCriteria(House.class);Criteria.setFirstResult(51);criteria.setMaxResult(20);List result = criteria.list();CCriteria criteria = session.createCriteria(House.class);criteria.setMaxResult(20);List result = criteria.

13、list();DCriteria criteria = session.createCriteria(House.class);Criteria.setFirst(51);criteria.setMax(20);List result = criteria.list(); 17下面關(guān)于Hibernate關(guān)聯(lián)映射說(shuō)法錯(cuò)誤的是()。A. 配置單項(xiàng)多對(duì)一關(guān)聯(lián)映射,在配置文件中需要使用標(biāo)簽B. 面向?qū)ο箢I(lǐng)域的關(guān)聯(lián)關(guān)系可以分為單向一對(duì)多或者單向多對(duì)一C. 人和手機(jī)號(hào)碼之間的關(guān)系是一對(duì)多關(guān)系D. cascade屬性描述了級(jí)聯(lián)操作的規(guī)則18如果數(shù)據(jù)庫(kù)是oracle或者db2,則generator屬性值不可以

14、使用(B)。 A. native B. identity C. hiloD. sequence19 Hibernate增加數(shù)據(jù)時(shí)可以調(diào)用Session的( a )方法。 A. save() B. update() C. delete()D. get()20 Hibernate對(duì)JDBC訪問(wèn)數(shù)據(jù)庫(kù)的代碼進(jìn)行了封裝,從而大大的簡(jiǎn)化了數(shù)據(jù)訪問(wèn)層的代碼,它是針對(duì)三層架構(gòu)中( c )的解決方案。 A. 表現(xiàn)層 B. 業(yè)務(wù)邏輯層 C. 持久化層D. 數(shù)據(jù)庫(kù)系統(tǒng)21 使用Hibernate技術(shù)實(shí)現(xiàn)數(shù)據(jù)庫(kù)持久化時(shí),(d)內(nèi)容不在Hibernate配置文件中。 A. 數(shù)據(jù)庫(kù)連接信息 B. 數(shù)據(jù)庫(kù)類型 C. sh

15、ow_sql參數(shù)D. 數(shù)據(jù)庫(kù)表和實(shí)體的映射信息22 級(jí)聯(lián)刪除時(shí),cascade屬性是( c )。 A. all B. save C. deleteD. save-update23 以下不屬于Cascade的屬性取值的有( b )。 A. all B. save C. deleteD. save-update24 Inverse屬性值為( c )標(biāo)識(shí)主控方。 A. all B. false C. trueD. none25 從性能考慮,Inverse屬性值通常設(shè)置為( b)。 A. all B. false C. trueD. None26 數(shù)據(jù)庫(kù)表account對(duì)應(yīng)實(shí)體類為Account類,以

16、下HQL語(yǔ)句錯(cuò)誤的有( d)。 A. select * from Account B. From Account C. From Account as modelD. Select * from account27 setMaxResult(3)方法中,參數(shù)值3是指( C )。 A. 從第3條記錄開(kāi)始 B. 從第4條記錄開(kāi)始 C. 查詢3條記錄D. 查詢4條記錄28 關(guān)于HQL查詢,下列說(shuō)法中錯(cuò)誤的是( A )。 A. HQL查詢的select子句中必須區(qū)分大小寫(xiě) B. HQL支持統(tǒng)計(jì)函數(shù) C. HQL支持僅查詢對(duì)象的某幾個(gè)屬性,并將查詢結(jié)果保存在Object數(shù)組中D. HQL語(yǔ)句可以實(shí)現(xiàn)類似

17、于PreparedStatement的效果29 在Hibernate中,下面代碼實(shí)現(xiàn)了對(duì)Account實(shí)體中accountName屬性的模糊查詢,則下列說(shuō)法正確的是(B )。Session session=this.getSession();String hql=from Account model where model.accountName like ?; /(1)Query query=session.createQuery(hql); /(2)query.setString(0,%張%);/(3)List list=query.list();/(4) A. 第(1)行中,Accoun

18、t 與model之間必須有as關(guān)鍵字 B. 第(2)行中沒(méi)有錯(cuò)誤 C. 第(3)行應(yīng)該為:query.setString(0,張飛);D. 第(4)行應(yīng)該為:List list=query.executeQuery();30 Criteria查詢通過(guò)面向?qū)ο蠡脑O(shè)計(jì)將數(shù)據(jù)查詢條件封裝為一個(gè)對(duì)象,下列寫(xiě)法正確的是( D )。 A. Criteria criteria=session.createQuery(Account.class)List list=criteria.list(); B. Criteria criteria=session.addCriteria(Account.class)

19、List list=criteria.list(); C. Criteria criteria=session.queryCriteria(Account.class)List list=criteria.list();D. Criteria criteria=session.createCriteria(Account.class)List list=criteria.list();31 將某個(gè)對(duì)象從Session的一級(jí)緩存中清除的方法是( C)。 A. close() B. clear() C. evict()D. flush()32 在set節(jié)點(diǎn)中設(shè)置outer-join=true,當(dāng)調(diào)

20、用Session的find方法時(shí)采用( C)。 A. 立即檢索 B. 延遲檢索 C. 迫切左外連接檢索D. 批量檢索33 類級(jí)別的默認(rèn)檢索是( a)。 A. 立即檢索 B. 延遲檢索 C. 迫切左外連接檢索D. 批量檢索34 延遲檢索返回代理類的實(shí)例不具備的特征有( d)。 A. 在Hibernate運(yùn)行時(shí)動(dòng)態(tài)生成 B. 當(dāng)Hibernate創(chuàng)建代理類實(shí)例時(shí),僅初始化OID屬性,其他屬性均為null,占用內(nèi)存空間較少 C. 當(dāng)應(yīng)用程序第一次訪問(wèn)代理類實(shí)例時(shí), Hibernate將初始化代理類的實(shí)例,在初始化的過(guò)程中執(zhí)行select語(yǔ)句并從數(shù)據(jù)庫(kù)中加載對(duì)象的所有數(shù)據(jù)。D. 當(dāng)訪問(wèn)getId訪法時(shí)

21、,Hibernate會(huì)初始化代理類的實(shí)例,在初始化的過(guò)程中執(zhí)行select語(yǔ)句,并從數(shù)據(jù)為中加載對(duì)象的所有數(shù)據(jù)。35 由持久化狀態(tài)向游離狀態(tài)轉(zhuǎn)變的方法不包括( C)。 A. close() B. clear() C. lock()D. evict()36 由持久化狀態(tài)向游離狀態(tài)轉(zhuǎn)變的方法不包括( C)。 A. 臨時(shí)狀態(tài) B. 無(wú)引用狀態(tài) C. 持久化狀態(tài)D. 游離狀態(tài)37 對(duì)于以下程序,Customer對(duì)象在第幾行變?yōu)橛坞x狀態(tài)?( D)Session session1=sessionFactory.openSession(); Transaction tx1 = session1.beginT

22、ransaction(); Customer customer=new Customer(); /1customer.setName(Tom); session1.save(customer); /2mit(); /3session1.close(); /4 A. 第(1)行 B. 第(2)行 C. 第(3)行D. 第(4)行38 關(guān)于HQL與SQL,以下哪些說(shuō)法正確?(B)。 A. HQL與SQL沒(méi)什么差別 B. HQL面向?qū)ο?,而SQL操縱關(guān)系數(shù)據(jù)庫(kù) C. 在HQL與SQL中,都包含select,insert,update,delete語(yǔ)句D. HQL僅用于查詢和刪除數(shù)據(jù),不

23、支持insert,update語(yǔ)句39 下面關(guān)于hibernate核心接口說(shuō)明錯(cuò)誤的是?(B)。 A. Configuration 接口:配置Hibernate,根據(jù)其啟動(dòng)hibernate,創(chuàng)建SessionFactory 對(duì)象 B. SessionFactory 接口:負(fù)責(zé)保存、更新、刪除、加載和查詢對(duì)象,是線程不安全的 C. Query 和Criteria 接口:執(zhí)行數(shù)據(jù)庫(kù)的查詢D. Transaction 接口:管理事務(wù)40 下面關(guān)于Hibernate說(shuō)法正確的是(BD)。(選擇兩項(xiàng)) A. Hibernate是ORM的一種實(shí)現(xiàn)方式 B. Hibernate不要JDBC的支持 C. 屬

24、于控制層D. 屬于數(shù)據(jù)持久層41 下面關(guān)于Hibernate中Session的說(shuō)法正確的是(AD)。(選擇兩項(xiàng)) A. Session是輕量級(jí)的,可以隨意的創(chuàng)建和銷毀 B. Session是重量級(jí)的,不能隨意的創(chuàng)建和銷毀 C. Session是線程安全的D. Session不是線程安全的42 下面關(guān)于Hibernate中l(wèi)oad和get方法說(shuō)法正確的是(D)。 A. 這兩個(gè)方法是一樣的,沒(méi)有任何的區(qū)別 B. 這兩個(gè)方法不一樣,laod先找緩存,再找數(shù)據(jù)庫(kù) C. 這兩個(gè)方法不一樣,get先找緩存,再找數(shù)據(jù)庫(kù)D. 以上說(shuō)法都不對(duì)43 下面關(guān)于Hibernate中Transaction的使用說(shuō)法正確

25、的是(B)。 A. Transaction是可有可無(wú)的 B. Transaction在做查詢的時(shí)候是可選的 C. Transaction在做刪除的時(shí)候是可選的D. Transaction在做修改的時(shí)候是可選的44 從SessionFactory中得到Session的方法是(A)。 A. getSession B. openSession C. currentSessionD. createSession45 關(guān)于Hibernate中關(guān)系的說(shuō)話正確的是(A)。 A. 一對(duì)多必須用Set來(lái)映射 B. 多對(duì)一必須用Set來(lái)映射 C. 一對(duì)多可以用Set來(lái)映射,也可以用List、Map來(lái)映射D. 多對(duì)

26、一可以用Set來(lái)映射,也可以用List、Map來(lái)映射46 下面關(guān)于數(shù)據(jù)持久化概念的描述,錯(cuò)誤的是(A)。 A. 保存在內(nèi)存中數(shù)據(jù)的狀態(tài)是臨時(shí)狀態(tài) B. 持久狀態(tài)的數(shù)據(jù)在關(guān)機(jī)后數(shù)據(jù)依然存在 C. 數(shù)據(jù)可以由持久狀態(tài)轉(zhuǎn)換為臨時(shí)狀態(tài)D. 將數(shù)據(jù)轉(zhuǎn)換為持久狀態(tài)的機(jī)制稱為數(shù)據(jù)持久化47 在使用了Hibernate的系統(tǒng)中,要想在刪除某個(gè)客戶數(shù)據(jù)的同時(shí)刪除該客戶對(duì)應(yīng)的所有訂單數(shù)據(jù),下面方法可行的是(A)。 A. 配置客戶和訂單關(guān)聯(lián)的cascade屬性為save-update B. 配置客戶和訂單關(guān)聯(lián)的cascade屬性為all C. 設(shè)置多對(duì)一關(guān)聯(lián)的inverse屬性為trueD. 設(shè)置多對(duì)一關(guān)聯(lián)的inv

27、erse屬性為false48 以下關(guān)于SessionFactory的說(shuō)法哪些正確?( C)。 A. 對(duì)于每個(gè)數(shù)據(jù)庫(kù)事務(wù),應(yīng)該創(chuàng)建一個(gè)SessionFactory對(duì)象 B. 一個(gè)SessionFactory對(duì)象對(duì)應(yīng)多個(gè)數(shù)據(jù)庫(kù)存儲(chǔ)源 C. SessionFactory是重量級(jí)的對(duì)象,不應(yīng)該隨意創(chuàng)建。如果系統(tǒng)中只有一個(gè)數(shù)據(jù)庫(kù)存儲(chǔ)源,只需要?jiǎng)?chuàng)建一個(gè)D. SessionFactory的load()方法用于加載持久化對(duì)象49 在Hibernate關(guān)系映射配置中,inverse屬性的含義是( A)。 A. 定義在節(jié)點(diǎn)上,聲明要負(fù)責(zé)關(guān)聯(lián)的維護(hù) B. 聲明在節(jié)點(diǎn)上,聲明要對(duì)方負(fù)責(zé)關(guān)聯(lián)的維護(hù) C. 定義在節(jié)點(diǎn)上,

28、聲明對(duì)方要負(fù)責(zé)關(guān)聯(lián)的維護(hù)D. 聲明在節(jié)點(diǎn)上,聲明要負(fù)責(zé)關(guān)聯(lián)的維護(hù)50 Hibernate對(duì)象從臨時(shí)狀態(tài)到持久狀態(tài)轉(zhuǎn)換的方式有?( A)。 A. 調(diào)用session的save方法 B. 調(diào)用session的close方法 C. 調(diào)用session的clear方法D. 調(diào)用session的evict方法簡(jiǎn)答題1,Hibernate工作原理及為什么要用?原理:1.讀取并解析配置文件2.讀取并解析映射信息,創(chuàng)建SessionFactory3.打開(kāi)Sesssion4.創(chuàng)建事務(wù)Transation5.持久化操作6.提交事務(wù)7.關(guān)閉Session8.關(guān)閉SesstionFactory 為什么要用:1. 對(duì)J

29、DBC訪問(wèn)數(shù)據(jù)庫(kù)的代碼做了封裝,大大簡(jiǎn)化了數(shù)據(jù)訪問(wèn)層繁瑣的重復(fù)性代碼。2. Hibernate是一個(gè)基于JDBC的主流持久化框架,是一個(gè)優(yōu)秀的ORM實(shí)現(xiàn)。他很大程度的簡(jiǎn)化DAO層的編碼工作3. hibernate使用Java反射機(jī)制,而不是字節(jié)碼增強(qiáng)程序來(lái)實(shí)現(xiàn)透明性。4. hibernate的性能非常好,因?yàn)樗莻€(gè)輕量級(jí)框架。映射的靈活性很出色。它支持各種關(guān)系數(shù)據(jù)庫(kù),從一對(duì)一到多對(duì)多的各種復(fù)雜關(guān)系。2,Hibernate是如何延遲加載?1. Hibernate2延遲加載實(shí)現(xiàn):a)實(shí)體對(duì)象 b)集合(Collection)2. Hibernate3 提供了屬性的延遲加載功能當(dāng)Hibernate在

30、查詢數(shù)據(jù)的時(shí)候,數(shù)據(jù)并沒(méi)有存在與內(nèi)存中,當(dāng)程序真正對(duì)數(shù)據(jù)的操作時(shí),對(duì)象才存在與內(nèi)存中,就實(shí)現(xiàn)了延遲加載,他節(jié)省了服務(wù)器的內(nèi)存開(kāi)銷,從而提高了服務(wù)器的性能。3Hibernate中怎樣實(shí)現(xiàn)類之間的關(guān)系?(如:一對(duì)多、多對(duì)多的關(guān)系)類與類之間的關(guān)系主要體現(xiàn)在表與表之間的關(guān)系進(jìn)行操作,它們都市對(duì)對(duì)象進(jìn)行操作,我們程序中把所有的表與類都映射在一起,它們通過(guò)配置文件中的many-to-one、one-to-many、many-to-many、4 說(shuō)下Hibernate的緩存機(jī)制1. 內(nèi)部緩存存在Hibernate中又叫一級(jí)緩存,屬于應(yīng)用事物級(jí)緩存2. 二級(jí)緩存:a) 應(yīng)用及緩存b) 分布式緩存條件:數(shù)據(jù)不

31、會(huì)被第三方修改、數(shù)據(jù)大小在可接受范圍、數(shù)據(jù)更新頻率低、同一數(shù)據(jù)被系統(tǒng)頻繁使用、非 關(guān)鍵數(shù)據(jù)c) 第三方緩存的實(shí)現(xiàn)5 Hibernate的查詢方式Sql、Criteria,object comptositionHql:1、 屬性查詢2、 參數(shù)查詢、命名參數(shù)查詢3、 關(guān)聯(lián)查詢4、 分頁(yè)查詢5、 統(tǒng)計(jì)函數(shù)6 如何優(yōu)化Hibernate?1.使用雙向一對(duì)多關(guān)聯(lián),不使用單向一對(duì)多2.靈活使用單向一對(duì)多關(guān)聯(lián)3.不用一對(duì)一,用多對(duì)一取代4.配置對(duì)象緩存,不使用集合緩存5.一對(duì)多集合使用Bag,多對(duì)多集合使用Set6. 繼承類使用顯式多態(tài)7. 表字段要少,表關(guān)聯(lián)不要怕多,有二級(jí)緩存撐腰7 Hibernate有

32、哪幾種查詢數(shù)據(jù)的方式3種:hql、條件查詢QBC(Query By Criteria)、原生sql (通過(guò)createSQLQuery建立)8. 談?wù)凥ibernate中inverse的作用inverse屬性默認(rèn)是false,就是說(shuō)關(guān)系的兩端都來(lái)維護(hù)關(guān)系。比如Student和Teacher是多對(duì)多關(guān)系,用一個(gè)中間表TeacherStudent維護(hù)。Gp)i如果Student這邊inverse=”true”, 那么關(guān)系由另一端Teacher維護(hù),就是說(shuō)當(dāng)插入Student時(shí),不會(huì)操作TeacherStudent表(中間表)。只有Teacher插入或刪除時(shí)才會(huì)觸發(fā)對(duì)中間表的操作。所以兩邊都inve

33、rse=”true”是不對(duì)的,會(huì)導(dǎo)致任何操作都不觸發(fā)對(duì)中間表的影響;當(dāng)兩邊都inverse=”false” 或默認(rèn)時(shí),會(huì)導(dǎo)致在中間表中插入兩次關(guān)系。9. 說(shuō)說(shuō)Hibernate中的update()和saveOrUpdate()的區(qū)別,session的load()和get()的區(qū)別。saveOrUpdate()方法可以實(shí)現(xiàn)update()的功能,但會(huì)多些步驟,具體如下:如果對(duì)象在該session中已經(jīng)被持久化,不進(jìn)行操作;對(duì)象的標(biāo)識(shí)符屬性(identifier property)在數(shù)據(jù)庫(kù)中不存在或者是個(gè)暫時(shí)的值,調(diào)用save()方法保存它;如果session中的另一個(gè)對(duì)象有相同的標(biāo)識(shí)符拋出一個(gè)異

34、常;以上皆不符合則調(diào)用update()更新之。Session.load/get方法均可以根據(jù)指定的實(shí)體類和id從數(shù)據(jù)庫(kù)讀取記錄,并返回與之對(duì)應(yīng)的實(shí)體對(duì)象。session的get()和load()其區(qū)別在于:如果未能發(fā)現(xiàn)符合條件的記錄,get方法返回null,而load方法會(huì)拋出一個(gè)ObjectNotFoundException;load方法可返回實(shí)體的代理類實(shí)例,而get方法永遠(yuǎn)直接返回實(shí)體類;load方法可以充分利用內(nèi)部緩存和二級(jí)緩存中的現(xiàn)有數(shù)據(jù),而get方法則僅僅在內(nèi)部緩存中進(jìn)行數(shù)據(jù)查找,如沒(méi)有發(fā)現(xiàn)對(duì)應(yīng)數(shù)據(jù),將越過(guò)二級(jí)緩存,直接調(diào)用SQL完成數(shù)據(jù)讀取。10.Hibernate中對(duì)象的三種狀

35、態(tài)瞬時(shí)態(tài)(Transient)、 持久態(tài)(Persistent)、脫管態(tài)(Detached)。處于持久態(tài)的對(duì)象也稱為PO(Persistence Object),瞬時(shí)對(duì)象和脫管對(duì)象也稱為VO(Value Object)。瞬時(shí)態(tài)由new命令開(kāi)辟內(nèi)存空間的java對(duì)象,eg. Person person = new Person(”amigo”, “女”);如果沒(méi)有變量對(duì)該對(duì)象進(jìn)行引用,它將被java虛擬機(jī)回收。瞬時(shí)對(duì)象在內(nèi)存孤立存在,它是攜帶信息的載體,不和數(shù)據(jù)庫(kù)的數(shù)據(jù)有任何關(guān)聯(lián)關(guān)系,在Hibernate中,可通過(guò)session的save()或 saveOrUpdate()方法將瞬時(shí)對(duì)象與數(shù)據(jù)庫(kù)

36、相關(guān)聯(lián),并將數(shù)據(jù)對(duì)應(yīng)的插入數(shù)據(jù)庫(kù)中,此時(shí)該瞬時(shí)對(duì)象轉(zhuǎn)變成持久化對(duì)象。持久態(tài)處于該狀態(tài)的對(duì)象在數(shù)據(jù)庫(kù)中具有對(duì)應(yīng)的記錄,并擁有一個(gè)持久化標(biāo)識(shí)。如果是用hibernate的delete()方法,對(duì)應(yīng)的持久對(duì)象就變成瞬時(shí)對(duì)象,因數(shù)據(jù)庫(kù)中的對(duì)應(yīng)數(shù)據(jù)已被刪除,該對(duì)象不再與數(shù)據(jù)庫(kù)的記錄關(guān)聯(lián)。當(dāng)一個(gè)session執(zhí)行close()或clear()、evict()之后,持久對(duì)象變成脫管對(duì)象,此時(shí)持久對(duì)象會(huì)變成脫管對(duì)象,此時(shí)該對(duì)象雖然具有數(shù)據(jù)庫(kù)識(shí)別值,但它已不在HIbernate持久層的管理之下。持久對(duì)象具有如下特點(diǎn):1. 和session實(shí)例關(guān)聯(lián);n2. 在數(shù)據(jù)庫(kù)中有與之關(guān)聯(lián)的記錄。脫管態(tài)當(dāng)與某持久對(duì)象關(guān)聯(lián)的s

37、ession被關(guān)閉后,該持久對(duì)象轉(zhuǎn)變?yōu)槊摴軐?duì)象。當(dāng)脫管對(duì)象被重新關(guān)聯(lián)到session上時(shí),并再次轉(zhuǎn)變成持久對(duì)象。脫管對(duì)象擁有數(shù)據(jù)庫(kù)的識(shí)別值,可通過(guò)update()、saveOrUpdate()等方法,轉(zhuǎn)變成持久對(duì)象。脫管對(duì)象具有如下特點(diǎn):1. 本質(zhì)上與瞬時(shí)對(duì)象相同,在沒(méi)有任何變量引用它時(shí),JVM會(huì)在適當(dāng)?shù)臅r(shí)候?qū)⑺厥眨?. 比瞬時(shí)對(duì)象多了一個(gè)數(shù)據(jù)庫(kù)記錄標(biāo)識(shí)值。11 Detached Object(游離對(duì)象)有什么好處Detached Object(游離對(duì)象)可以傳遞到任何層直到表現(xiàn)層而不是用任何DTO(Data Transfer Objects). 然后你還可以重新把游離對(duì)象賦給另外一個(gè)Ses

38、sion.12. hibernate如何實(shí)現(xiàn)數(shù)據(jù)表映射的繼承關(guān)系1、兩個(gè)表,子類重復(fù)父類的屬性。2、一個(gè)表,子類父類共用一個(gè)表 3、兩個(gè)表,子類引用父類的主鍵,享用公共的字段或?qū)傩浴?批量刪除Query query=session.createQuery(”update”或”delete”);query.executeUpdate();13.Hibernate的應(yīng)用(hibernate的結(jié)構(gòu))答:/首先獲得SessionFactory 的對(duì)象SessionFactory sessionFactory = new Configuration().configure().buildSessionF

39、actory();/然后獲得session 的對(duì)象Session session = sessionFactory.openSession();/其次獲得Transaction 的對(duì)象Transaction tx = session.beginTransaction();/執(zhí)行相關(guān)的數(shù)據(jù)庫(kù)操作:增,刪,改,查session.save(user); /增加, user 是User 類的對(duì)象session.delete(user); /刪除session.update(user); /更新Query query = session.createQuery(“from User”); /查詢List

40、 list = query.list();/提交事務(wù)mit();/如果有異常,我們還要作事務(wù)的回滾,恢復(fù)到操作之前tx.rollback();/最后還要關(guān)閉session,釋放資源session.close();14.Hibernate的五個(gè)核心接口Configuration 接口:配置Hibernate,根據(jù)其啟動(dòng)hibernate,創(chuàng)建SessionFactory 對(duì)象;SessionFactory 接口:初始化Hibernate,充當(dāng)數(shù)據(jù)存儲(chǔ)源的代理,創(chuàng)建session 對(duì)象,sessionFactory 是線程安全的,意味著它的同一個(gè)實(shí)例可以被應(yīng)用的多個(gè)線程共享,是重量級(jí)、

41、二級(jí)緩存;Session 接口:負(fù)責(zé)保存、更新、刪除、加載和查詢對(duì)象,是線程不安全的,避免多個(gè)線程共享同一個(gè)session,是輕量級(jí)、一級(jí)緩存;Transaction 接口:管理事務(wù);Query 和Criteria 接口:執(zhí)行數(shù)據(jù)庫(kù)的查詢。15.hibernate中數(shù)據(jù)表映射關(guān)系主要有什么類型?one-to-manyinverse:主控方,外鍵的關(guān)系有誰(shuí)控制inverse=false 是主控方,外鍵是由它控制的inverse=true 是被控方,外鍵與它沒(méi)關(guān)系要想實(shí)現(xiàn)主控方的控制必須將被控方作為主控方的屬性cascade:級(jí)聯(lián)主表增從表增主表修從表修主表刪從表刪lazy:延遲lazy=fals

42、e:一下將所有的內(nèi)容取出,不延時(shí)(常用)lazy=true:取出部分內(nèi)容,其余內(nèi)容動(dòng)態(tài)去取通過(guò)get可以取出對(duì)方的所有內(nèi)容16. hibernate中Query對(duì)象的使用1 個(gè)或多個(gè)屬性查詢:Query query=session.createQuery(”select customername,customerid from Customer”)List l=query.list();For(int i=0;il.size();i+)Obejct object=(Object)l.get(i);Object0 object1分組: “select count(*),productname f

43、rom Product group by productname order by productname”取值與屬性一樣配置的查詢,在*.hbm.xml中 Query query=session.getNamedQuery(sql);聯(lián)接1”from Customer as customer join fetch customer.buySet”:將多的放到buySet屬性中,得出的結(jié)是Customer有一個(gè),Buy有多個(gè)聯(lián)接2“from Customer as customer join customer.buySet”:得出的對(duì)象,customer與buy是1對(duì)1子查詢:”from Cu

44、stomer as customer where (select count(*) from customer.buySet)1編程題一:關(guān)聯(lián)映射 考點(diǎn)1:一對(duì)多,多對(duì)一 (簡(jiǎn)單配置一道題)例1.在MySQL或SQL Server中創(chuàng)建數(shù)據(jù)庫(kù):CITYOA,并創(chuàng)建如下表:(1)信息類別表:OA_Category字段名類型說(shuō)明GNoInt(10)類別編號(hào)(主鍵)自增量GNameVarchar(20)類別名稱(2)信息表:OA_Info字段名類型說(shuō)明INFONOint(10)信息編號(hào)(主鍵)自增量SubjectVarchar(200)信息標(biāo)題ContentVarchar(1000)信息內(nèi)容GNOInt(10)類別編號(hào)(外鍵)Value類:(一道題,不用寫(xiě)get(), set())public class InfoValue private int no=0;private Stri

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論