标签:hibernate session session使用
Session:用来执行被持久化的增删查改操作,与数据库进行交互;Session对象是非线程安全的。
SessionFactory:用来负责初始化Hibernate。充当数据源的代理,并负责创建Session对象。线程安全的全局对象,只需要被实例化一次。
Transaction:负责事务相关的操作。
Query/Criteria:负责执行各种数据库查询操作,可以使用HQL和SQL语句两种表达方式。
Configuration:负责配置并启动Hibernate,创建SessionFactory对象。
1:Configuration接口启动Hibernate,创建SessionFactory对象
SessionFactory sessionFactory = new Configuration().configuration().buildSessionFactory();
2:SessionFactory创建Session
Session session = sessionFactory.openSession();
或者
Session session = sessionFactory.getCurrentSession();
openSession()和getCurrentSession()的区别:
http://blog.csdn.net/yannanying/article/details/46880583
3:使用Session创建对象
Hibernate中对象的三种状态
1)Transaction
2)Persistent
3)Detached
3.1:获取对象的两种方法:get()和load()的区别
(注意:要检索的对象需要具备标识符和类型,否则需要借助查询接口Query和Criteria)
Entity entity = (Entity)Session.load(Entity.class,ID);
Entity entity = (Entity)Session.get(Entity.class,ID);
1)load()方法认为给定的标识ID对应的数据在数据库中一定存在,因此可以放心使用代理来延迟加载,如果数据不存在则只能抛出异常;
get()方法对于给定的标识ID进行查找,查找不到则返回null。
2)load()方法返回的是代理类实例;
get()方法返回的是实体。
3)load()方法可以充分在一级缓存和二级缓存中查找现有ID的数据;
get()方法只在一级缓存中查找,找不到则直接调用SQL在数据库中查找。
3.2:保存对象:save()和persist()方法的区别:
1)persist()方法无返回值,而save()方法返回保存对象的标识符。如entity的ID。
2)persist()方法只能保存瞬态和持久态的对象,保存其他状态的对象则会抛出异常。而save()方法可以保存任何状态的对象。
Entity entity = new Entity();
Session session = getSession();
Trasaction tx = session.beginTransaction();
session.save(entity);//persist方法也行
tx.commit();
session.close();
解释:
调用save方法后,瞬态的entity对象就会转变为持久态;
进行commit()后,Hibernate会隐式的调用session.flush()方法(可以显示调用),将session的中对象的变化从缓存中刷出;此时,session对象才会请求一个数据库连接。
调用close()方法后entity对象则脱离工作单元的管理,从持久态变成游离态对象。
3.3:更新对象
指把瞬态或者游离态对象的变化更行到数据库中
session.update(entity);
3.4:删除对象
session.delete(entity);
程序调用完上述代码后并没有在数据库中删除掉entity这条记录,而是当事物提交(commit)或者刷新缓存(flush)后才真正被删除。
版权声明:本文为博主原创文章,未经博主允许不得转载。
标签:hibernate session session使用
原文地址:http://blog.csdn.net/yannanying/article/details/46880725