一 Configuration,SessionFactiory,Session:
Configuration:
负责管理Hibernate的配置信息,这些配置信息都是从配置文件hibernate.cfg.xml或者Hibernate. properties读取的,当然也可以自定义文件名称,只要在实例化Configuration的时候指定具体的路径就可以了; SessionFactiory:
Configuration的实例会根据当前的配置信息,构造SessionFactory实例。只创建一次,SessionFactory是线程安全的,一般情况下一个应用中一个数据库共享一 个 SessionFactory实例。 Session: 一般的持久化方法(CRUD)都是通过Session来调用的,Session是非线程安全的。最好一个业务开启一个Session,同时开启一个事物,Session关掉事物也关 掉,最好是这样保持他们的生命周期一致。
二 三大状态(Transient、Persistent、Detached)
Transient状态(临时态/瞬时态)最大的特征是: * 在数据库中没有与之匹配的数据 * 没有纳入session的管理 通过new操作创建出来的对象,此时的对象未被纳入session管理,数据库中没有相对应的记录 Persistent状态(持久态)最大的特征是: * 在数据库中有与之匹配的数据 * 纳入了session的管理 * 在清理缓存(脏数据检查)的时候,会和数据库同步
Detached状态(游离态/托管态)最大的特征是: * 在数据库中有与之匹配的数据 * 没有纳入session的管理
三大状态图
三大状态举例:
public class SessionTest extends TestCase {
public void testSession(){ Session session = null; Transaction tx = null; User user = null; try { session = HibernateUtils.getSession(); tx = session.beginTransaction();
//Transient状态,临时状态,一经save就会转变到Persistent状态 user = new User(); user.setName("中田"); user.setPassword("nakada"); user.setCreateTime(new Date()); user.setExpireTime(new Date());
//Persistent状态,持久化状态(数据库中有相同的值与之对应),当属性发生改变时,hibernate会自动与数据库同步,不需要update,update的实质不是更新数据,而是转换状态。 session.save(user); user.setName("幸島"); tx.commit(); }catch (Exception e){ e.printStackTrace(); tx.rollback(); }finally { HibernateUtils.closeSession(session); }
//Detached状态,游离状态,session关闭之后,便由persistent状态变为Detached状态 try{ session = HibernateUtils.getSession(); session.beginTransaction(); user.setName("幸島"); //在Detached状态下,更新对象的属性,需要update才能反映到数据库 session.update(user); session.getTransaction().commit(); }catch(Exception e){ e.printStackTrace(); session.getTransaction().rollback(); }finally{ HibernateUtils.closeSession(session); } } }
|