hibernate常用的接口和持久化对象的状态变化
2012-01-04 00:38
344 查看
Hibernate接口
Criteria、 Query、 Transaction 查询依赖
Session
SessionFactory
Configuration
hibernate.cfg.xml hibernate数据库配置 *.hbm.xml 持久化映射
Configuration类
Configuration类负责管理Hibernate的配置信息
Hibernate运行的底层信息:数据库的Url,用户名,密码,jdbc驱动类,数据库Dialect,数据库连接池等
Hibernate配置文件默认为Hibernate.cfg.xml
Hibernate映射文(*.hbm.xml)
Configuration config =new Configuration(); 生成对象
config.configure(); 加载Hibernate配置和映射文件
SessionFactory sessionFactory = config.buildSessionFactory(); 生成SessionFactory对象
SessionFactory 接口
会话工厂缓存了生成的sql语句和一些数据
对话在应用初始化时被创建
使用Hibernate访问多个数据库,需要对每个数据库使用一个SessionFactory
应用程序从工厂获得Session实例
Configuration config = new Configuration();
config.configure();
SessionFactory sessionFactory =config.buildSessionFactory();
Session 接口
Session 称为持久坏管理器,因为它是与持久化有关的操作连接接口
Session代表与数据库之间的一次操作
Session通过SessionFactory打开,在所有的工作完成后需要关闭
Seesion的使用在只能在一个线程中使用
Configuration config =new Configuration().configure();
SessionFactory sessionFactory = config.buildSessionFactory();
Session session = sessionFactory.getCurrentSession();(或者openSession)
Session包扩就是对数据库的增删改查
-save()保存
-get()/load();读取 区别get如果没有找到记录返回null load没有找到,抛出违例
-update()更新
-delete()删除
常见的主要方法:save(),update(),delete(),clear(),close(),flush(),get(),load(),beginTransaction()。
1.save():将持久化对象保持到session缓存中,切忌并不是数据库中,它主要做的事情是:a.根据持久化对象标识生成策略去标识,如:native,会在oracle数据库中产生序列 的nextval即:hibernate_sequence.nextval。assigned,要手动的输入主键。b.将获取到的标识数据通过持久化对象的setter方法放入对象中,所以对象在sava方法里才能够获得标识 的值。c.将持久化对象放入session缓存,在commit()的时候会生成insert语句
2.update(): 将保存在session缓存中的持久化对象的数据进行更新,但不能跟新持久化标识,在commit()的时候会生成update语句
3.delete():此方法用于从数据库中删除与Java对象对应的记录。如果传入的参数是持久化对象,Session就计划执行一个delete语句。如果传入的参数是游离对象,先使游离对象被 Session关联,使它变为持久化对象,然后计划执行一个delete语句。值得注意的是,Session只有在清理缓存的时候的才执行delete语句。此外,只有当调用Session的close()方法时 ,才会从Session的缓存中删除该对象。
4.clear(),clear(),close(),flush():都是清空session中的对象
5.get(),load():如果未能发现符合条件的记录,get方法返回null,而load方法会抛出一个ObjectNotFoundException。get方法如果在session缓存中找到了该id对应的对象 ,如果刚好该对象前面是被代理过的,如被load方法使用过,或者被其他关联对象延迟加载过,那么返回的还是原先的代理对象,而不是实体类对象,如果该代理对象还没有加载实体 数据(就是id以外的其他属性数据),那么它会查询二级缓存或者数据库来加载数据,但是返回的还是代理对象,只不过已经加载了实体数据
6.beginTransaction():它是对事务的开启
Transaction 接口
Transaction从底层的事物实现中抽象出来的接口
或许是JDBC事务或者jta的事务这有助保持Hibernate应用在不同类型的执行环境或容器中的可移植性
使用Hibernate进行操作时必须显示的调用Transaction
常见的方法主要有:
1.begin():开始事务
2.commit(): 清空session中的对象,并且更新到数据库中
3.rollback():回滚事务
Seession session=sessionFactory.getCurrentSession();
Transaction tx = session.beginTransaction();
...
tx.commit();
session.close();
Query接口
使用Query类型的对象可以方便我们对数据进行查询,它使用qbc,qbe,hql或者原生sql对数据执行查询操作
Configuration config = new Configuration().configure();
SessionFactory sessionFactory = config.buildSessionFactory();
Session session = sessionFactory.getCurrentSession();
Transaction tx =session.beginTransaction();
Query query =session.createQuery("from table");
List list = query.list();
tx.commit();
Criteria接口
Criteria接口和Query接口类似,它允许我们创建并且执行面向对象方式的查询
Configuration config = new Configuration().configure();
SessionFactory sessionFactory = config.buildSessionFactory();
Session session = sessionFactory.getCurrentSession();
Transaction tx =session.beginTransaction();
Criteria crit =session.createCriteria(Test.class);
Criterion criterion1 = Restrictions.like("name","张%");
crit.add(criterion1);
List list = crit.list();
tx.commit();
hibernate的持久化对象的状态变化
A. 瞬态:对象不存在于session中,也不存在于数据库中
B. 持久态:对象存在于session中,数据库中存不存在没关系
C. 游离态:对象不存在于session中,存在于数据库中
session的save()、update()、get()、load()会将对象变成持久态
session的clear()、close()、flush()会将对象变成托管态或者瞬态(没有进行事物提交)
session的delete()会将对象变成瞬态
经过研究,瞬态在经过session.sava(obj)后,在commit()时就会将瞬态转化为持久态,游离态在session.update(obj)后,在commit()时就会将游离态转化为持久态,最终是将瞬态,游离态转化为持久态与数据库打交道。
尽管以上的内容很繁琐,但是只需要记住一点:session中可以保存对象,并且session中不同对象,标识不能相同。
Criteria、 Query、 Transaction 查询依赖
Session
SessionFactory
Configuration
hibernate.cfg.xml hibernate数据库配置 *.hbm.xml 持久化映射
Configuration类
Configuration类负责管理Hibernate的配置信息
Hibernate运行的底层信息:数据库的Url,用户名,密码,jdbc驱动类,数据库Dialect,数据库连接池等
Hibernate配置文件默认为Hibernate.cfg.xml
Hibernate映射文(*.hbm.xml)
Configuration config =new Configuration(); 生成对象
config.configure(); 加载Hibernate配置和映射文件
SessionFactory sessionFactory = config.buildSessionFactory(); 生成SessionFactory对象
SessionFactory 接口
会话工厂缓存了生成的sql语句和一些数据
对话在应用初始化时被创建
使用Hibernate访问多个数据库,需要对每个数据库使用一个SessionFactory
应用程序从工厂获得Session实例
Configuration config = new Configuration();
config.configure();
SessionFactory sessionFactory =config.buildSessionFactory();
Session 接口
Session 称为持久坏管理器,因为它是与持久化有关的操作连接接口
Session代表与数据库之间的一次操作
Session通过SessionFactory打开,在所有的工作完成后需要关闭
Seesion的使用在只能在一个线程中使用
Configuration config =new Configuration().configure();
SessionFactory sessionFactory = config.buildSessionFactory();
Session session = sessionFactory.getCurrentSession();(或者openSession)
Session包扩就是对数据库的增删改查
-save()保存
-get()/load();读取 区别get如果没有找到记录返回null load没有找到,抛出违例
-update()更新
-delete()删除
常见的主要方法:save(),update(),delete(),clear(),close(),flush(),get(),load(),beginTransaction()。
1.save():将持久化对象保持到session缓存中,切忌并不是数据库中,它主要做的事情是:a.根据持久化对象标识生成策略去标识,如:native,会在oracle数据库中产生序列 的nextval即:hibernate_sequence.nextval。assigned,要手动的输入主键。b.将获取到的标识数据通过持久化对象的setter方法放入对象中,所以对象在sava方法里才能够获得标识 的值。c.将持久化对象放入session缓存,在commit()的时候会生成insert语句
2.update(): 将保存在session缓存中的持久化对象的数据进行更新,但不能跟新持久化标识,在commit()的时候会生成update语句
3.delete():此方法用于从数据库中删除与Java对象对应的记录。如果传入的参数是持久化对象,Session就计划执行一个delete语句。如果传入的参数是游离对象,先使游离对象被 Session关联,使它变为持久化对象,然后计划执行一个delete语句。值得注意的是,Session只有在清理缓存的时候的才执行delete语句。此外,只有当调用Session的close()方法时 ,才会从Session的缓存中删除该对象。
4.clear(),clear(),close(),flush():都是清空session中的对象
5.get(),load():如果未能发现符合条件的记录,get方法返回null,而load方法会抛出一个ObjectNotFoundException。get方法如果在session缓存中找到了该id对应的对象 ,如果刚好该对象前面是被代理过的,如被load方法使用过,或者被其他关联对象延迟加载过,那么返回的还是原先的代理对象,而不是实体类对象,如果该代理对象还没有加载实体 数据(就是id以外的其他属性数据),那么它会查询二级缓存或者数据库来加载数据,但是返回的还是代理对象,只不过已经加载了实体数据
6.beginTransaction():它是对事务的开启
Transaction 接口
Transaction从底层的事物实现中抽象出来的接口
或许是JDBC事务或者jta的事务这有助保持Hibernate应用在不同类型的执行环境或容器中的可移植性
使用Hibernate进行操作时必须显示的调用Transaction
常见的方法主要有:
1.begin():开始事务
2.commit(): 清空session中的对象,并且更新到数据库中
3.rollback():回滚事务
Seession session=sessionFactory.getCurrentSession();
Transaction tx = session.beginTransaction();
...
tx.commit();
session.close();
Query接口
使用Query类型的对象可以方便我们对数据进行查询,它使用qbc,qbe,hql或者原生sql对数据执行查询操作
Configuration config = new Configuration().configure();
SessionFactory sessionFactory = config.buildSessionFactory();
Session session = sessionFactory.getCurrentSession();
Transaction tx =session.beginTransaction();
Query query =session.createQuery("from table");
List list = query.list();
tx.commit();
Criteria接口
Criteria接口和Query接口类似,它允许我们创建并且执行面向对象方式的查询
Configuration config = new Configuration().configure();
SessionFactory sessionFactory = config.buildSessionFactory();
Session session = sessionFactory.getCurrentSession();
Transaction tx =session.beginTransaction();
Criteria crit =session.createCriteria(Test.class);
Criterion criterion1 = Restrictions.like("name","张%");
crit.add(criterion1);
List list = crit.list();
tx.commit();
hibernate的持久化对象的状态变化
A. 瞬态:对象不存在于session中,也不存在于数据库中
B. 持久态:对象存在于session中,数据库中存不存在没关系
C. 游离态:对象不存在于session中,存在于数据库中
session的save()、update()、get()、load()会将对象变成持久态
session的clear()、close()、flush()会将对象变成托管态或者瞬态(没有进行事物提交)
session的delete()会将对象变成瞬态
经过研究,瞬态在经过session.sava(obj)后,在commit()时就会将瞬态转化为持久态,游离态在session.update(obj)后,在commit()时就会将游离态转化为持久态,最终是将瞬态,游离态转化为持久态与数据库打交道。
尽管以上的内容很繁琐,但是只需要记住一点:session中可以保存对象,并且session中不同对象,标识不能相同。
相关文章推荐
- hibernate常用的接口和类的方法以及持久化对象的状态变化
- 才高行厚的hibernate(3)---对象状态&常用接口
- 【Hibernate】持久化对象的状态的变化和对应的方法
- Hibernate主键生成策略和持久化对象的三种状态和MySql常用的数据库语句
- Hibernate学习笔记(四)----核心开发接口、对象的三种状态、session常用方法
- 深入学习Hibernate4_05hibernate中对象的四种状态(临时状态,持久化状态,游离状态,删除状态),以及常用方法的介绍
- Hibernate持久化对象的三种状态
- 学习ORM框架—hibernate(三):跟踪持久化对象状态,掌握对象持久化
- 【hibernate】持久化对象的三种状态
- hibernate持久化对象状态
- Hibernate的学习之路十(持久化对象的三个状态)
- Hibernate持久化对象的三种状态
- Hibernate持久化对象状态、转换方法和操作步骤
- HIbernate学习笔记(二) hibernate对象的三种状态与核心开发接口
- Hibernate3---持久化对象的状态
- Hibernate三种持久化对象的状态
- Hibernate框架学习(第四讲)---持久化对象状态
- hibernate持久化对象的四个状态
- Hibernate中持久化对象的状态
- Hibernate中四种对象状态,Session常用方法,映射类型