<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    和風細雨

    世上本無難事,心以為難,斯乃真難。茍不存一難之見于心,則運用之術自出。

    Hibernate的主要組件

    主要的Hibernate組件

    Configuration類

    Configuration類啟動Hibernate的運行環境部分,用于加載映射文件以及為它們創建一個SessionFacotry。完成這兩項功能后,就可丟棄Configuration類。

    // 從hibernate.cfg.xml創建SessionFactory 示例
    sessionFactory = new Configuration().configure()
    .buildSessionFactory();

    SessionFactory類

    Hibernate中Session表示到數據庫的連接(不止于此),而SessionFactory接口提供Session類的實例。
    SessionFactory實例是線程安全的,通常在整個應用程序中共享。
    從Configuration創建SessionFacotry的代碼如右。

    // 從hibernate.cfg.xml創建SessionFactory 示例
    SessionFactory  sessionFactory = new Configuration().configure()
    .buildSessionFactory();

    Session類

    Session表示到數據庫的連接,session類的實例是到Hibernate框架的主要接口,使你能夠持久化對象,查詢持久化以及將持久化對象轉換為臨時對象。
    Session實例不是線程安全的,只能將其用于應用中的事務和工作單元。
    創建Session實例的代碼如右:

    SessionFactory sessionFactory = new Configuration().configure()
    .buildSessionFactory();
    Session session=sessionFactory.openSession();

    保存一個對象

    用Hibernate持久化一個臨時對象也就是將它保存在Session實例中:
    對user實例調用save時,將給該實例分配一個生成的ID值,并持久化該實例,在此之前實例的id是null,之后具體的id由生成器策略決定,如果生成器類型是assignd,Hibernate將不會給其設置ID值。
    Flush()方法將內存中的持久化對象同步到數據庫。存儲對象時,Session不會立即將其寫入數據庫;相反,session將大量數據庫寫操作加入隊列,以最大限度的提高性能。

    User user=new User(“Andy”,22);
    Session session=sessionFatory.openSession();
    session.save(user);
    session.flush();
    session.close();

    保存或更新一個對象

    Hibernate提供了一種便利的方法用于在你不清楚實例對應的數據在數據庫中的狀態時保存或更新一個對象,也就是說,你不能確定具體是要保存save還是更新update,只能確定需要把對象同步到數據庫中。這個方法就是saveOrUpdate。
    Hibernate在持久化時會查看實例的id屬性,如果其為null則判斷此對象是臨時的,在數據庫中找不到對應的實例,其后選擇保存這個對象;而不為空時則意味著對象已經持久化,應該在數據庫中更新該對象,而不是將其插入。

    User user=。。。;
    Session session=sessionFatory.openSession();
    session.saveOrUpdate(user);
    Session.flush();
    session.close();

    刪除一個對象

    從數據庫刪除一個對象使用session的delete方法,執行刪除操作后,對象實例依然存在,但數據庫中對應的記錄已經被刪除。

    User user=。。。;
    Session session=sessionFatory.openSession();
    session.delete(user);
    session.flush();
    session.close();

    以ID從數據庫中取得一個對象

    如果已經知道一個對象的id,需要從數據庫中取得它,可以使用Session的load方法來返回它。代碼如右.
    注意此放在id對應的記錄不存在時會拋出一個HibernateException異常,它是一個非檢查性異常。對此的正確處理是捕獲這個異常并返回一個null。
    使用此想法如果采用默認的懶惰加載會導致異常,對此最簡單的解決方案是把默認的懶惰加載屬性修改為false。如右:

    User user=(User)session.load(User.class,"008");
    session.close();

    -----------------------------------------------

    <?xml version="1.0"?>
    <!DOCTYPE hibernate-mapping PUBLIC
    "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
    "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
    <hibernate-mapping package="org.hibernate.auction">
    <class name="com.sitinspring.domain.User"
    table="USERTABLE_OKB" lazy="false">
    <id name="id" column="ID" >
    <generator class="uuid.hex"/>
    </id>
    。。。。
    </class>
    </hibernate-mapping>

    檢索一批對象

    檢索一批對象需要使用HQL,session接口允許你創建Query對象以檢索持久化對象,HQL是面向對象的,你需要針對類和屬性來書寫你的HQL而不是表和字段名。
    從數據庫中查詢所有用戶對象如下:
    Query query=session.createQuery(“from User”);// 注意這里User是類名,from前沒有select。
    List<User> users=(List<User>)query.list();

    從數據庫中查詢名為“Andy”的用戶如下:
    String name=“Andy”;
    Query query=session.createQuery(“from User where name=‘”+name+”’”);
    List<User> users=(List<User>)query.list();

    以上方法類似于Statement的寫法,你還可以如下書寫:
    Query query=session.createQuery("from User  user where user.name = :name");
    query.setString("name", “Andy");
    List<User> users=(List<User>)query.list();

    posted on 2008-04-30 16:50 和風細雨 閱讀(1257) 評論(0)  編輯  收藏 所屬分類: Hibernate

    主站蜘蛛池模板: 国产真人无码作爱视频免费| 国产精品免费在线播放| 16女性下面无遮挡免费| 亚洲欧洲在线观看| 欧洲人免费视频网站在线| 亚洲AV无码成人网站久久精品大 | 国产免费久久精品丫丫| 中文字幕专区在线亚洲| 国产久爱免费精品视频| 亚洲色婷婷一区二区三区| 毛片免费在线观看网站| 最新亚洲卡一卡二卡三新区| 精品久久久久国产免费| 亚洲av无码专区亚洲av不卡| 亚洲国产精品人人做人人爽| www.xxxx.com日本免费| 亚洲大片在线观看| 免费无码AV电影在线观看| 国产亚洲精品美女| 亚洲欭美日韩颜射在线二| 一区二区三区在线免费看| 亚洲一区中文字幕在线电影网| 午夜一级毛片免费视频| 精品国产污污免费网站入口在线 | 亚洲一区二区三区免费视频| 女人18毛片免费观看| 一个人看的免费视频www在线高清动漫 | 免费成人高清在线视频| 亚洲乱码在线播放| 亚洲AV无码一区二区三区在线观看| 成人毛片100免费观看| 亚洲人成片在线观看| 免费夜色污私人影院在线观看| 国产精品免费久久久久久久久| 337p欧洲亚洲大胆艺术| 国产美女被遭强高潮免费网站| 永久在线观看免费视频| 日韩亚洲国产综合高清| 国产A在亚洲线播放| 日本免费一本天堂在线| 久久精品电影免费动漫|