Hibernate的一级缓存和快照
hibernate的一级缓存属于session级别的缓存。它存在的目的是为了提高代码的效率,减少访问数据库的次数。程序在调用方法操作数据时,hibernate会发送一条sql语句获取到数据后再由hibernate组装之后返回给程序。如果程序需要多次操作同一数据时,hibernate就要不断的向数据库发送sql语句,这样就大大降低了程序的执行效率。hibernate缓存和快照的存在就可以大大提高程序的执行效率。
缓存原理
程序调用getXXX()方法获取数据,hibernate在每次访问数据库之后,会将获取的数据,封装起来实体对象存放在hibernate的session缓存中,然后再将数据返回给程序,当程序再次访问数据时,hibernate会先查看缓存中是否存在相同的数据,如果有,则直接返回缓存中的数据,如果没有,则向数据库发送sql语句操作数据库,并将获取到的数据,封装存入session缓存中并返回给程序。
|
快照原理
hibernate的快照机制和session缓存机制一样也是为了提高程序的执行效率,session缓存是为了提高程序在获取数据时的效率,而快照则是为了提高程序在更新数据时的效率。在hibernate将数据封装成对象放入session缓存中时,同时也会复制一份数据放入session缓存的快照中,当程序调用uadateXXX()方法并提交事务之后,hibernate不会直接向数据库发送sql语句执行更新操作,而是会先清理缓存,比对缓存和快照中的对象属性是否一致,如果一致,则不执行update语句,即不会向数据库发送sql语句,如果不一致,则将数据同步更新到数据库中,并更新快照区。
|