应试(hibernate篇 一)

为了避免篇幅过长  大约5题为一篇

1.hibernate的5大核心接口

 configuration接口 

 配置hibernate 开启 hibernate 创建sessionFactory实例对象

 SessionFactory接口

 初始化hibernate 一个sessionFactory对应一个数据源 创建session接口对象

 SessionFactory特点:

  1.线程安全 一个实例多个线程共享

  2.不能随意创建和销毁  因为是重量级的 访问多个数据库时 需要创建对应的实例 避免造成数据混乱

  session接口 

   1.线程不安全 避免多个线程共享一个session

   2.轻量级 被称为持久化管理器 save delete update find load(get)

  transaction接口

   底层封装jdbc jta 事务 负责hibernate事务的管理

  Query Criteria接口

   负责数据的查询

   query封装HQL criteria封装基于字符创形式的

 

2.hibernate的一级缓存 二级缓存 查询缓存

 一级缓存 内置不可卸载 一个事务内有效 管理缓存方法 evict(Object o) 和clear()

               session.evict(obj):会把指定的缓冲对象进行清除;

               session.clear():把缓冲区内的全部对象清除,但不包括操作中的对象。

               get load  iterate(查询实体对象)


 二级缓存 是进程或者集群范围内的缓存 可配置的插件

               修改一级缓存的数据,会自动同步到二级缓存

                分为类级别缓存 集合级别缓存 更新时间戳 查询缓存

  

   查询缓存 缓存普通属性结果集的 对实体对象的结果集会缓存id

                  当关联的表发生修改或者查询条件改变时,查询缓存的生命周期结束

3.简述一下hibernate的开发流程

  1.加载hibernate的配置文件,读取配置文件的参数

  2.创建sessionFactory会话工厂(内部有连接池)

  3.打开session获取连接,构建session对象

  4. 开启事务

  5.进行操作

  6.提交事务

  7.关闭session将连接释放

   8.关闭连接池

4.如何进行hibernate的优化?

   1.数据库设计调整

   2.HQL优化

   3.API的正确使用

   4.主配置参数

   5.映射文件优化

   6.一级缓存的管理

   7.针对二级缓存,还有许多特有的策略

    8.事务控制策略

5.hibernate的No Session问题及解决方法

   当hibernate采用的是延迟加载时,并不会真正从数据库查询该数据,而是生成一个代理对象

   这个代理对象只有oid被赋值,其余皆为null.当load方法调用完,此次session生命周期就结束了

   当在此访问该对象且不在持久层时,就会报该错误.

  方法1:取消延迟加载的配置(最直接)

  方法2:在web.xml中做如下配置

  1. <filter>  
  2. <filter-name>openSessionInView</filter-name>  
  3. <filter-class>org.springframework.orm.hibernate3.support.OpenSessionInViewFilter</filter-class>  
  4. </filter>
  5. <filter-mapping>  
  6. <filter-name>openSessionInView</filter-name>  
  7. <url-pattern>/*</url-pattern>  
  8. </filter-mapping> 

 方法3:

 动态的关闭延迟加载的属性。采取的操作就是Hibernate.initialize(user);


 

猜你喜欢

转载自blog.csdn.net/ILoveZhc/article/details/79352607