偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

全面概括Hibernate Annotations

開(kāi)發(fā) 后端
這里介紹關(guān)于映射文件是使用 hbm.xml 文件還是使用 Hibernate Annotations 我們來(lái)看看2者的性能吧. 先聲明一下,個(gè)人認(rèn)為映射文件一旦配置好就不會(huì)在很大程度上改變了.

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

在這篇文章中我們就來(lái)討論一下 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文件
◆無(wú)法做自動(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 可能不是什么問(wèn)題. 但是對(duì)初學(xué)者還是個(gè)問(wèn)題

下面我們看看 Hibernate Annotations的特性吧! 可以解決xml遇到的問(wèn)題,有以下優(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 我們來(lái)看看2者的性能吧. 先聲明一下,個(gè)人認(rèn)為映射文件一旦配置好就不會(huì)在很大程度上改變了.所以使用xml文件并不會(huì)帶來(lái)很大的好處.如果你認(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" 等等類似的問(wèn)題 . 如果你經(jīng)常有這方面的變動(dòng)的話,下面的比較你可以不用看了,你應(yīng)該使用 xml文件 因?yàn)镠ibernate Annotations 無(wú)法很好的滿足你的要求.

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

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

  1. <property name="hibernate.hbm2ddl.auto">update</property> 

這一行, 因?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();//程序開(kāi)始時(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. }  

【編輯推薦】

  1. Hibernate對(duì)數(shù)據(jù)索引進(jìn)行緩存
  2. 剖析Hibernate主鍵生成幾種常用方式
  3. 淺析Hibernate實(shí)現(xiàn)實(shí)體對(duì)象延遲加載
  4. Hibernate集合類型的延遲加載特性
  5. 概括Hibernate屬性延遲加載
責(zé)任編輯:佚名 來(lái)源: 51CTO.com
相關(guān)推薦

2009-09-29 10:12:03

Hibernate A

2009-09-21 16:56:14

Hibernateibatis

2009-09-21 16:40:42

Hibernate可行

2009-09-28 15:24:38

Hibernate V

2009-09-24 09:25:10

Hibernate批量

2009-09-25 15:15:54

Hibernate檢索

2009-09-22 13:31:28

Hibernate C

2009-09-27 16:01:04

Hibernate A

2009-09-22 17:55:51

Spring Hibe

2009-09-29 16:29:40

Hibernate查詢

2009-09-22 09:31:15

Hibernate主鍵

2009-09-27 14:33:01

Hibernate批量

2009-09-28 09:56:53

Hibernate屬性

2009-09-16 16:55:07

LINQ to XML

2009-09-22 09:40:03

cascade和invHibernate

2009-09-22 13:12:25

Hibernateibatis

2009-09-25 13:18:15

Hibernate數(shù)據(jù)

2009-09-23 18:05:48

2009-09-24 13:45:53

Hibernate性能

2009-09-22 14:52:55

Hibernate p
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)