考试首页 | 考试用书 | 培训课程 | 模拟考场 | 考试论坛  
全国  |             |          |          |          |          |         
  当前位置:计算机等级 > 二级考试 > Java语言程序设计 > 考试辅导 > 文章内容
  

全国计算机等级考试二级Java重点内容(54)

中华IT学院   【 】  [ 2016年11月21日 ]

 

1.Hibernate框架的特性

  1)一级缓存

      session对象级别的缓存,利用该session取出的对象会放到缓存中.在后续查询时,首先去缓存中寻找,没有再去数据库寻找.

      session缓存区在session关闭后销毁.session复杂维护缓存区中对象的状态.

      在使用时,为了更好发挥一级缓存,需要保障同一个线程处理中,使用同一个Session对象.

a.使用ThreadLocal对SessionUtil进行改造,将Session对象与ThreadLocal绑定.

public class HibernateUtil {

         private static ThreadLocal tl=new ThreadLocal();

         private static Configuration conf;

         private static SessionFactory factory;

static {conf=new Configuration();factory=conf.buildSessionFactory();}

public static  Session getSession(){ Session session=tl.get();

         if(session==null){ session=factory.openSession(); tl.set(session);}return session; }

         public static Session closeSession(){ Session session=tl.get(); if(session!=null){session.close();tl.set(null);

                   }return session;}}

    b.Hibernate3之后的新版本,可以使用以下方法

      首先在hibernate.cfg.xml中添加配置

     

                   thread

     

      之后使用sessionFactory.getCurrentSession()方法获取Session

 

    注意:在使用此session时,必须将session操作封装在一个transaction

  

    一级缓存的管理:

     session.evict(obj);将obj对象从当前session的一级缓存中清除.

     session.clear():清除当前session的一级缓存.

 

  2)延迟加载

    当获取一个实体对象后,实体对象并没有立刻发送SQL语句,去数据库加载数据.而是在调用对象的getXXX()方法时采取加载数据.

    支持延迟加载的方法:session.load(),query.iterator().延迟加载方法返回的对象类型,是动态代理类型.

    session.get()和session.load()方法功能是按主键做条件查询数据,区别

如下:   

    a.get()方法不支持延迟加载,load()方法支持

    b.如果数据表中没有符合的记录,get()方法返回null,load()抛异常

    c.如果数据表中有符合的记录,get()返回的是实体类型对象,load()返回的是动态代理类型对象.

  

    在使用时,需要注意以下事项:

      a.使用延迟加载的API后,避免过早的关闭Session.

LazyInitializationException: could not initialize proxy - no Session

      b.根据需要选择延迟加载和非延迟加载API

-----------------了解---------------------- 

   Hibernate延迟加载机制:利用动态生成代理类型机制生成一个动态代理类,并重写对象的getXXX()方法,当调用get方法时,触发SQL查询,去数据库加载数据.

   Hibernate动态生成代理类型机制:

   以前编写程序:

     a.编写一个类源码

     b.调用编译器将源码编译成class字节码

     c.类加载器将字节码文件载入虚拟机内容

     d.虚拟机调用字节码文件的方法,解释运行

   Session.load()等延迟方法返回的类型是Foo$Enhancer$CGLIB....,

这些类型是Hibernate框架利用程序在内容中动态生成并编译的类型.

上述功能,是Hibernate调用asm.jar,cglib-2.1.3.jar工具包完成的.

   asm.jar主要用于在内存中动态和编译生成一个类

   cglib.jar是基于asm.jar,对其扩展,在内存中生成一个代理类型.该代理类是原类型的一个子类.

  3)Hibernate中对象的状态

    在Hibernate使用中,对象的状态有以下三种

    a.临时对象 : 在程序中使用new方式创建的对象

    b.持久对象 : 在程序中与session对象关联,由session负责管理的对象.

首页 1 2 尾页
分享到:
本文纠错】【告诉好友】【打印此文】【返回顶部
将考试网添加到收藏夹 | 每次上网自动访问考试网 | 复制本页地址,传给QQ/MSN上的好友 | 申请链接 | 意见留言 TOP
关于本站  网站声明  广告服务  联系方式  站内导航  考试论坛
Copyright © 2006-2017 中华考试网(Examw.com) All Rights Reserved  营业执照