<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

    主站蜘蛛池模板: 亚洲人成亚洲人成在线观看 | 亚洲国产美女福利直播秀一区二区| 一区二区免费在线观看| 国产免费看插插插视频| 色五月五月丁香亚洲综合网| 国产美女无遮挡免费视频网站 | 国产精品亚洲va在线观看| 成年女人免费视频播放体验区| 亚洲人成网网址在线看| 最近中文字幕mv免费高清电影| 亚洲精品无码中文久久字幕| 免费黄色网址入口| 国产午夜亚洲精品不卡免下载| www国产亚洲精品久久久日本| 72pao国产成视频永久免费| 亚洲男人的天堂www| 99国产精品免费观看视频| 亚洲国产成人在线视频| 精品国产一区二区三区免费看| 美女免费精品高清毛片在线视| 国产精品亚洲不卡一区二区三区 | 丁香花在线视频观看免费| 久久精品7亚洲午夜a| 97在线视频免费公开观看| 中文字幕乱码亚洲精品一区| 亚洲国产一成久久精品国产成人综合 | 黄色大片免费网站| 亚洲精品成人无限看| 99久久免费精品视频| 国产亚洲精aa在线看| 亚洲国产成人久久一区WWW| 国产一级a毛一级a看免费人娇| 亚洲手机中文字幕| 免费大片在线观看网站| 中文字幕免费在线看线人动作大片| 亚洲爱情岛论坛永久| 热99re久久精品精品免费| 永久免费AV无码网站国产 | 亚洲va精品中文字幕| 亚洲Av无码乱码在线znlu| 免费国产黄网站在线观看可以下载|