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