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 王永庆 阅读(198) 评论(0)  编辑  收藏 所属分类: HIBERNATE

只有注册用户登录后才能发表评论。


网站导航:
 
<2009年10月>
27282930123
45678910
11121314151617
18192021222324
25262728293031
1234567

常用链接

留言簿(1)

随笔分类

随笔档案

关注blogs

搜索

  •  

最新评论

阅读排行榜

评论排行榜