全国二级计算机等级考试Java知识点

  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负责管理的对象.

  处于session缓存中的对象都是持久对象

  对象的持久性:指的是对象的数据状态在事务提交时可以与数据库保持同步更新.

  session.flush();//将持久对象与数据库同步

  tx.commit();//事务提交,提交前默认也调用session.flush()

  c.托管对象 : 在程序中如果session.close()后,session负责管理的持久对象将成为托管对象.垃圾回收器负责回收临时和托管状态,持久状态不能回收.

分享

热门关注

计算机二级考试时间多长

关于计算机二级

计算机二级考试时间一年几次呢

关于计算机二级

计算机二级考试时间分配

关于计算机二级

计算机二级考试内容考些什么

考试内容

计算机二级什么时候出成绩呢

计算机成绩

计算机二级考试知识点有哪些

计算机二级考试知识点

计算机二级基础知识点归纳

计算机二级基础知识点

全国计算机等级考试二级难吗

计算机等级考试

全国计算机等级考试二级证书的含金量

全国计算机等级考试

计算机等级考试可以直接考二级吗

计算机等级考试