国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 學(xué)院 > 開(kāi)發(fā)設(shè)計(jì) > 正文

HibernateAnnotations實(shí)戰(zhàn)(二)

2019-11-18 11:14:22
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

  在這篇文章中我們就來(lái)討論一下 hbm.xml 與 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)題


下面我們看看 Annotations的 特性吧! 可以解決xml碰到的問(wèn)題,有以下優(yōu)點(diǎn)






  • 描述符減少。以前在xml配置中往往需要描述java屬性的類(lèi)型,關(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 文件還是使用 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)才能滿(mǎn)足業(yè)務(wù)需求 于是改為length="128" 等等類(lèi)似的問(wèn)題 . 假如你經(jīng)常有這方面的變動(dòng)的話(huà),下面的比較你可以不用看了 , 你應(yīng)該使用 xml文件 因?yàn)锳nnotations 無(wú)法很好的滿(mǎn)足你的要求.


現(xiàn)在讓我們就來(lái)看看2者的性能比較吧.


(說(shuō)明: 這里只是比較查找 插入 的時(shí)間快慢,沒(méi)有比較除運(yùn)行時(shí)間以外的其他性能,如 內(nèi)存占用量 等等)


先來(lái)看看測(cè)試程序和配置.


首先在 Hibernate.cfg.xml 文件中去掉了


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


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


Test.java 如下:


/*
 * Created on 2005
 * @author 
 */
package test.hibernate.annotation;

import org.hibernate.session;
import org.hibernate.Transaction;

public class Test {
  
  public static void main(String [] args) {
    long start = 0;
    long end = 0;
    start = System.currentTimeMillis();  //程序開(kāi)始時(shí)間
    
    Session s = HibernateUtil.currentSession();
    long mid =  System.currentTimeMillis();  //初始化完畢的時(shí)間 (可能此時(shí)并沒(méi)有初始化完畢^(qū)_^)
    
    Transaction tx = s.beginTransaction();    
    /********************測(cè)試讀取的代碼************************/
    Person p = null;
    for(int i = 1; i <= 100; i ++) {
    p = (Person) s.get(Person.class, i);
    System.out.println(p.getName());
    }
    System.out.println(p.getName());




發(fā)表評(píng)論 共有條評(píng)論
用戶(hù)名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 弥渡县| 玉龙| 滁州市| 平阳县| 类乌齐县| 偃师市| 遂昌县| 德昌县| 太仓市| 锦州市| 北辰区| 新宁县| 三穗县| 石屏县| 秦安县| 土默特右旗| 裕民县| 泾阳县| 濮阳市| 桦南县| 顺平县| 敦煌市| 平舆县| 鸡西市| 恩平市| 荔波县| 太湖县| 昌吉市| 鸡西市| 浑源县| 台湾省| 高陵县| 西吉县| 乐亭县| 无极县| 保靖县| 波密县| 拉萨市| 襄垣县| 桦川县| 左权县|