posts - 66,  comments - 11,  trackbacks - 0
            在Hibernate中,session負責完成對象的持久化操作,而Hibernate Session與之Hibernate,相當于JDBCConnection與之JDBC
          1、初始化Hibernate配置管理類Configuration
          Configuration config = new Configuration().configure();
          利用CLASSPATH中的默認配置文件hibernate.cfg.xml構建Configuration實例。
          2、通過Configuration類實例創建Session的工廠類SessionFactory
          SessionFactory sessionFactory = config.buildSessionFactory();
          3、通過SessionFactory得到Session實例
          session = sessionFactory.openSession();
          通過這個Session實例,就可以對對象進行持久化操作

            Configuration類負責管理Hibernate的配置信息,Hibernate運行時需要獲取一些底層實現的基本信息,包括:
          數據庫URL
          數據庫用戶名
          數據庫用戶密碼
          數據庫JDBC驅動類
          數據庫適配器,用于對特定數據庫提供支持。

            Configuration類一般只有在獲取SessionFactory時需要涉及,當SessionFactory實例創建之后,由于配置信息已經由hibernate綁定在返回的SessionFactory之中,因此一般情況下無需在對其操作。
          如果不希望使用默認的hibernate.cfg.xml文件作為配置文件,還有如下方法:
          File file = new File("c:\\sample\\myhiernate.xml");
          Configuration config = new Configuration().configure(file);

            SessionFactory負責創建Session實例:
          Configuration config = new Configuration().configure();
          SessionFactory sessionFactory = config.buildSessionFactory();
          SessionFactory一旦構造完成,即被賦予特定的配置信息。如果需要使用基于改動后的config實例的SessionFactory,需要從config重新構建一個SessionFactory實例。
          SessionFactory中保存了對應當前數據庫配置的所有映射關系,同時也負責維護當前的二級緩存和Statement Pool.由此可見,SessionFactory的創建過程必然非常復雜,代價高昂,而這也就意味著,我們應該在系統設計中充分考慮到SessionFactory的重用策略。由于SessionFactory是線程安全的,可以多個線程并發調用,大多數情況下,一個應用中針對一個數據庫共享一個SessionFactory實例即可。

            Session作為貫穿Hibernate的持久化管理器核心,提供了眾多持久化方法,如save、update、delete,find等。通過這些方法,可透明的完成對象的增刪改查。同事,Hibernate Session的設計是非線程安全的,也就是說,一個Session實例同時只可一個線程使用,同一個Session實例的多線程并發調用將導致難以預知的錯誤
          Configuration config = new Configuration().configure();
          SessionFactory sessionFactory = config.buildSessionFactory();
          Session session = sessionFactory.openSession();

          Save操作:
          //新增名為"Emma"的用戶記錄
          TUser user = new TUser();
          user.setName(
          "Emma");
          session.save(user);

          Get操作:
          //假設T_User表中存在id=1的記錄
          TUser user = (TUser)session.get(TUser.class,new Integer(1));

          delete操作:
          //假設T_User表中存在id=1的記錄
          TUser user = (TUser)session.get(TUser.class,new Integer(1));
          session.delete(user);


          //也可以通過HQL指定刪除條件(Hibernate2)
          session.delete("from TUser where id=1");


          //通過Query接口進行基于HQL的刪除操作(Hibernate3)
          String hql = "delete TUser where id=1";
          Query query 
          = session.createQuery(hql);
          query.executeUpdate();
          Find(Hibernate2)操作
          String hql 
          = "form TUser where name='Erica'";
          List userList 
          = session.find(hql);


          Hibernate3中的Session接口取消了find方法,我們必須通過Query或Criteria接口進行數據查詢
          通過Query接口進行數據查詢:
          String hql = "from TUser user where user.name like ?";
          Query query 
          = session.createQuery(hql);
          query.setParameter(
          0,"Cartier");

          List list 
          = query.list();

          Iterator it 
          = list.iterator();
          while(it.hasNext()){
              TUser user 
          = (TUser)it.next();
              System.out.println(user.getName);
          }

          通過Criteria接口進行數據查詢:
          Criteria criteria = session.createCriteria(TUser.class);
          criteria.add(Expression.eq(
          "name","Cartier"));

          List list 
          = criteria.list();
          Iterator it 
          = list.iterator();
          while(it.hasNext()){
              TUser user 
          = (TUser)it.next();
              System.out.println(user.getName());
          }

          Query面向HQL和Native SQL,而Criteria則提供了面向對象的查詢模式。



          posted on 2009-10-11 10:33 王永慶 閱讀(206) 評論(0)  編輯  收藏 所屬分類: HIBERNATE
          <2009年10月>
          27282930123
          45678910
          11121314151617
          18192021222324
          25262728293031
          1234567

          常用鏈接

          留言簿(1)

          隨筆分類

          隨筆檔案

          關注blogs

          搜索

          •  

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 铜山县| 梅河口市| 永胜县| 泰来县| 铜山县| 呼图壁县| 那曲县| 泗洪县| 长沙县| 镇沅| 辽宁省| 乐安县| 汉源县| 江阴市| 南陵县| 六安市| 无为县| 建阳市| 罗源县| 武清区| 察隅县| 麻城市| 古交市| 新平| 仪陇县| 常宁市| 大宁县| 中西区| 扬州市| 贺兰县| 高陵县| 隆化县| 修武县| 白银市| 麦盖提县| 福建省| 临邑县| 上思县| 伊吾县| 永靖县| 隆子县|