1、Hibernate核心接口,本章内容,Session缓存 持久化对象状态 Configuration SessionFactory Session Transaction Query,Session缓存,Hibernate对其持久化对象实现了缓存管理,来提高应用性能,Hibernate支持两级缓存管理,Session缓存为一级缓存,是系统内置的,不能被卸载。 Hibernate的二级缓存是可选的,默认是不支持的,应用必须明确配置二级缓存才能使用。 Session缓存的作用: 降低访问数据库的频率 保证缓存中的对象与数据库中的相关记录保持同步,持久化对象的状态,对于需要被持久化的对象,处于以下三
2、种状态之一: 临时状态(Transient) 刚刚用new创建,还没有被持久化,还不处于Session缓存之中 持久化状态(Persistent) 已经被持久化,加入到Session的缓存之中 游离状态(Detached) 已经被持久化,但不再处于Session的缓存之中,对象的状态转换,临时对象的特征,不处于Session的缓存中 在数据库中没有对应的记录 以下情况会使对象进入临时状态: 当通过new语句刚创建了一个对象 Session的delete()方法会使一个对象从持久化状态或游离状态进入临时状态,持久化对象的特征,位于一个Session实例的缓存中 持久化对象和数据库中相关的记录对应
3、 Session在清理缓存时,会根据持久化对象的属性的变化来同步更新数据库 Session的save()方法把临时对象变为持久化对象 Session的load()或get()方法返回的是持久化对象,find()方法返回的List元素 Session的update(), saveOrUpdate(),lock()使对象从游离状态变成持久化状态。,游离对象的特征,不再处于Session的缓存中 游离对象是从持久化对象转变过来的 调用Session的close()方法时,Sessin的缓存被清空,缓存中的持久化对象会变成游离对象 Session的evict()能从缓存中删除一个对象,使之从持久化状态
4、变成游离状态,Hibernate核心接口,Hibernate核心接口,Configuration SessionFactory Session Transaction Query/Criteria,Configuration,Configuration 类负责管理Hibernate 的配置信息,这些信息由配置文件提供,包括如下内容: Hibernate运行的底层信息:数据库的URL、用户名、密码、JDBC驱动类,数据库Dialect,数据库连接池等。 Hibernate映射文件(*.hbm.xml)。 调用代码 属性文件(hibernate.properties) Configuration
5、cfg = new Configuration(); cfg.addClass(XXX.class);/该方法加载XXX.hbm.xml cfg.addResource(); Xml文件(hibernate.cfg.xml) Configuration cfg = new Configuration().configure();,SessionFactory,应用程序从SessionFactory(会话工厂)里获得Session(会话)实例。它在多个应用线程间进行共享。通常情况下,整个应用只有唯一的一个会话工厂例如在应用初始化时被创建。然而,如果你使用Hibernate访问多个数据库,你需要对
6、每一个数据库使用一个会话工厂。 会话工厂缓存了生成的SQL语句和Hibernate在运行时使用的映射元数据。 调用代码 SessionFactory sessionFactory = cfg.buildSessionFactory();,Session,Session不是线程安全的,它代表与数据库之间的一次操作会话。 Session也称为持久化管理器,因为它是与持久化有关的操作接口。 Session通过SessionFactory打开,在所有的工作完成后,需要关闭。 Session缓存其管理的持久化对象。 调用代码 Session session = sessionFactory.openSe
7、ssion();,Transaction,它将应用代码从底层的事务实现中抽象出来这可能是一个JDBC事务,一个JTA用户事务或者甚至是一个公共对象请求代理结构(CORBA)允许应用通过一组一致的API控制事务边界。 这有助于保持Hibernate应用在不同类型的执行环境或容器中的可移植性。 Hibernate提供的事务提交模式默认为非自动提交模式(默认:autoCommit=false),因此使用Hibernate进行操作时(增、删、改)必须显示的调用Transaction的API。 调用代码 Transaction tx = session.beginTransaction(); mit()/rollback();,Query,Query接口封装了Hibernate强大的对象查询能力,同时也支持数据库的更新操作 提供了动态查询的参数绑定功能 提供list(),iterator(),scroll()等对象导航方法 提供uniqueResult()方法获取单独的对象 提供executeUpdate()方法来执行DML语句,