高级java工程师-------hibernate的作用和关键点

来源:互联网 发布:apache embedded 编辑:程序博客网 时间:2024/06/09 20:06

一、在ssh框架中hibernate的作用是什么呢?

1、hibernate是一种ORM(对象映射)框架的持久性框架,它是对JDBC做了轻量级的封装,使得程序员可以面向对象思维的对数据库进行操作。

2、支持各种关系数据库,它的级联功能很好的支持着表与表之间的各种关系。

3、与spring整合之后连接数据库的代码和控制事物的代码都统一由spring管理,简化了代码,以及更好的管理事物。

4、hibernate提供一级和二级缓存的功能,极大的提高了性能。

5、hibernate提供方便的API进行CURD,减轻了大量SQL语句的编写。

二、级联关系中重要的属性及意义

1、inverse(由哪一端维护关联关系)

这时inverse值用来标明由谁来维护关联关系。设为true时反转控制角色,即由该 属性关联的对象维护关联关系。

2、casecade(级联删除、存储、更新、all)

all : 所有操作都传递到相关联的对象
save-update 保存和更新传递到相关联的对象
delete 删除操作传递到相关联的对象
delete-orphan : 所有操作都传递到相关联的对象 并删除不再与父对象关联的对象。

3、lazy 懒加载(必须保持session有效否则无法获取,默认为true延迟加载)

lazy=false表示已启动就会将所有关联表的记录加载

lazy=true表示只有调到关联的方法才会加载

三、缓存机制

一级缓存:一级缓存是hibernate默认存在的,不能人为的开启和配置的,就是session缓存。一级缓存的生命周期依赖于session的生命周期

session.evict(对象)  从一级缓存中移除指定对象              session.clear()从缓存中移除所有缓存对象

session.readOnly()

二级缓存:二级缓存是有sessionfactory对象负责管理,是应用级别的缓存,所以生命周期更长,故称为sessionFactory缓存,是跨session的,sessionFactory是单例模式

的对象,所以sessionFactory的所有session都共享二级缓存。

ehcahe中配置需要二级缓存的类

           1、query.list和query.iterate的区别?

当缓存中有list的结果时,query.list会不读缓存直接读数据库将结果存入缓存。query.iterate是先获取查询的所有id,然后到缓存中匹配,这种情况下query.iterate效率稍高

当缓存中没有list的结果时,query.list会不读缓存直接读数据库将结果存入缓存。query.iterate是先获取查询的所有id,然后到缓存中匹配,匹配缓存没有对应值时,会再去数据库查询这样效率就偏低。

          2、二级缓存的管理

sessionFactory.evict( 指定类型)            sessionFactory.evictCollection("集合")  sessionFactory.evictEntity(对象)  sessionFactory.evictEntity(对象,id)

          3、查询缓存

----------------------------------------------------------------------------------------------------------要求严格,参数一至------------------------------------------------------------------------------

四、hibernate优化

1、dynamic-update="true"   或者dynamic-insert="true"

   是指更新或者插入记录的时候只针对属性值改变的属性进行更新或者插入,针对性强,从而提高效率

2、延迟加载 lazy  loading

     1.设置持久化类得加载 默认lazy=true

      2.设置集合的加载  默认lazy=true

       3.设置属性的加载  默认lazy=false

 除了属性 时,lazy=true是指延迟加载,只有当需要时,才去调用数据库获取数据

 lazy="false"是指不延迟加载,一次性获取所有的数据,不管调用不调用

副作用:解决org.hibernate.LazyInitializationException

  Hibernate.initialize  

3、集合对象的抓取策略(fetching  strategies)

查询抓取(select    fetching)默认值



子查询抓取(subselect fetching)



连接抓取(join  fetching)



批量抓取

4、 hibernate中1+n问题

具体问题具体分析        query.list和query.iterate的合理使用


五、hibernate  的search




原创粉丝点击