hibernate核心API介绍

1.1. 对象的三种状态

临时状态(瞬时状态):

指的是该对象不受session对象管理,没有id值,刚刚被new创建出来的。

持久化状态:

通过session对象的savesaveOrUpdate方法从临时状态变成持久化状态。受session对象管理,有id值,持久化状态的对象在修改对象的属性的时候,会自动的把修改后的值同步到数据库中,相当发出update的语句

游离状态(托管状态)

通过session对象的closeclearevict方法把一个持久化状态的对象转换成游离状态的对象。

游离状态的对象不受session的管理,有id

删除状态(非官方)

 

1.2. Session详解

Session对象在hibernate中的属于一级缓存、会话级别的缓存、对象级别缓存,hibernate中不想用一级缓存,还不行,自带的。

缓存:把数据保存到内存中

 Session属于会话级别的缓存,如果不是同一个session对象,缓存的数据不能共用。

Get方法与load方法的区别(面试题)

1.Session中的get方法与load方法都可以把数据缓存到一级缓存

2.Get方法执行后会立即发出sql语句(立即加载),load方法不会立即发出sql语句,在调用对象中的非本地方法的时候会发出sql语句(懒加载)

3.load方法得到的对象是一个代理对象,get方法得到的对象是po类型的真实类型的对象

4.Get方法查询数据的时候,没有该数据,返回null,如果laod方法查询数据的时候,没有该数据,直接报错

 evictObj)方法:清除一级缓存中指定的缓存对象

 Clear方法:可以清楚一级缓存中的所有缓存对象

Update方法:更新对象,更新的对象没有id会报错,或者id在数据库中没有该记录,也会报错

1.3. SessionFactory介绍

l Hibernate中有一级缓存、二级缓存,一级缓存Session对象,二级缓存就是指的是SessionFactory对象,只不过hibernate没有提供二级缓存的实现类(第三方的缓存实现类来实现),提供了接口。

l SessionFactory是一个重量级的对象(在创建该对象的时候消耗资源比较大),所以hibernate中的SessionFactroy对象建议在应用中只有一份,它是一个线程安全的对象,此对象就可以作为成员变量使用。Session对象是一个线程安全的吗?(不安全)

l SessionFactory对象是创建Session对象的工厂,提供了两种方式得到Session。一种是openSession()、一种是getcurrentSession().

l openSessiongetcurrentSession区别(面试题)

openSession每次调用都会产生一个新的Session对象

 

要使用getcurrentSession方法需要在hibernate.cfg.xml配置文件中配置

<property name="hibernate.current_session_context_class">thread</property>

 

getcurrentSession每次调用先会去线程中拿,没有才创建一个新的session对象

两种方式获得session建议使用哪个方法?

在实际开发中使用getcurrentSession

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章