日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
全面概括HibernateAnnotations

本文向大家介紹Hibernate Annotations,可能好多人還不了解Hibernate Annotations,沒有關(guān)系,看完本文你肯定有不少收獲,希望本文能教會(huì)你更多東西。

在這篇文章中我們就來討論一下 hbm.xml 與 Hibernate Annotations的優(yōu)缺點(diǎn),看看那種情況最適合你.

首先,討論一下 xml 配置文件的優(yōu)點(diǎn),個(gè)人認(rèn)為主要優(yōu)點(diǎn)就是當(dāng)你改變底層配置時(shí) 不需要改變和重新編譯代碼,只需要在xml 中更改就可以了,例如 Hibernate.cfg.xml 當(dāng)你要更改底層數(shù)據(jù)庫(kù)時(shí),只要更改配置文件就可以了.Hibernate會(huì)為你做好別的事情.

那么xml的缺點(diǎn)呢,個(gè)人認(rèn)為有以下幾點(diǎn):
◆描述符多,不容易記憶,掌握 要深入了解還有看DTD文件
◆無法做自動(dòng)校驗(yàn),需要人工查找
◆讀取和解析xml配置要消耗一定時(shí)間,導(dǎo)致應(yīng)用啟動(dòng)慢,不便于測(cè)試和維護(hù)
◆當(dāng)系統(tǒng)很大時(shí),大量的xml文件難以管理
◆運(yùn)行中保存xml配置需要消耗額外的內(nèi)存
◆在O/R Mapping的時(shí)候需要在java文件和xml配置文件之間交替,增大了工作量

其中第一 二點(diǎn) 借助于先進(jìn)的IDE 可能不是什么問題. 但是對(duì)初學(xué)者還是個(gè)問題

下面我們看看 Hibernate Annotations的特性吧! 可以解決xml遇到的問題,有以下優(yōu)點(diǎn)
◆描述符減少。以前在xml配置中往往需要描述java屬性的類型,關(guān)系等等。而元數(shù)據(jù)本身就是java語(yǔ)言,從而省略了大量的描述符
◆編譯期校驗(yàn)。錯(cuò)誤的批注在編譯期間就會(huì)報(bào)錯(cuò)。
◆元數(shù)據(jù)批注在java代碼中,避免了額外的文件維護(hù)工作
◆元數(shù)據(jù)被編譯成java bytecode,消耗的內(nèi)存少,讀取也很快,利于測(cè)試和維護(hù)

關(guān)于映射文件是使用 hbm.xml 文件還是使用 Hibernate Annotations 我們來看看2者的性能吧. 先聲明一下,個(gè)人認(rèn)為映射文件一旦配置好就不會(huì)在很大程度上改變了.所以使用xml文件并不會(huì)帶來很大的好處.如果你認(rèn)為映射文件在你的項(xiàng)目中也經(jīng)常變化,比如一列String數(shù)據(jù),今天你使用 length="16" 明天你認(rèn)為該數(shù)據(jù)的長(zhǎng)度應(yīng)該更長(zhǎng)才能滿足業(yè)務(wù)需求 于是改為length="128" 等等類似的問題 . 如果你經(jīng)常有這方面的變動(dòng)的話,下面的比較你可以不用看了,你應(yīng)該使用 xml文件 因?yàn)镠ibernate Annotations 無法很好的滿足你的要求.

現(xiàn)在讓我們就來看看2者的性能比較吧.(說明: 這里只是比較查找 插入 的時(shí)間快慢,沒有比較除運(yùn)行時(shí)間以外的其他性能,如 內(nèi)存占用量 等等)

先來看看測(cè)試程序和配置.首先在 Hibernate.cfg.xml 文件中去掉了

 
 
 
  1.  name="hibernate.hbm2ddl.auto">update 

這一行, 因?yàn)樵谇懊娴膶?shí)驗(yàn)中以及建立了數(shù)據(jù)庫(kù)表了 不再需要更新了.如果你是第一次運(yùn)行該例子 還是要該行的.

 
 
 
  1. /*  
  2.  * Created on 2005  
  3.  * @author   
  4.  */  
  5. package test.hibernate.annotation;  
  6.  
  7. import org.hibernate.Session;  
  8. import org.hibernate.Transaction;  
  9.  
  10. public class Test {  
  11.  
  12. public static void main(String [] args) {  
  13. long start = 0;  
  14. long end = 0;  
  15. start = System.currentTimeMillis();//程序開始時(shí)間  
  16.  
  17. Session s = HibernateUtil.currentSession();  
  18. long mid =System.currentTimeMillis();  
  19. //初始化完畢的時(shí)間  
  20.  
  21. Transaction tx = s.beginTransaction();  
  22. //測(cè)試讀取的代碼  
  23. Person p = null;  
  24. for(int i = 1; i <= 100; i ++) {  
  25. p = (Person) s.get(Person.class, i);  
  26. System.out.println(p.getName());  
  27. }  
  28. System.out.println(p.getName());  
  29.  
  30. //測(cè)試讀取1次的代碼  
  31. Person p = null;  
  32. p = (Person) s.get(Person.class, 1);  
  33. System.out.println(p.getName());  
  34. //測(cè)試插入的代碼  
  35. /*  
  36. for (int i = 0; i < 100; i ++) {  
  37. Person p = new Person();  
  38. p.setAge(i+1);  
  39. p.setName("icerain"+i);  
  40. p.setSex("male"+i);  
  41. s.save(p);  
  42. s.flush();  
  43. }  
  44. */  
  45. tx.commit();  
  46. HibernateUtil.closeSession();  
  47.  
  48. end = System.currentTimeMillis(); //測(cè)試結(jié)束時(shí)間  
  49. System.out.println("String[] - start time: " + start);  
  50. System.out.println("String[] - end time: " + end);  
  51. System.out.println("Init time : " + (mid-start));   
  52. // 打印初始化用的時(shí)間  
  53. System.out.println("Last time is :" +(end - mid) );   
  54. //打印 數(shù)據(jù)操作的時(shí)間  
  55. System.out.println("Total time : " +(end - start));   
  56. //打印總時(shí)間  
  57. }  
  58. }  

文章標(biāo)題:全面概括HibernateAnnotations
地址分享:http://www.5511xx.com/article/dhohhdd.html