在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
王永慶 閱讀(205)
評論(0) 編輯 收藏 所屬分類:
HIBERNATE