hibernate的get()和load()介绍二

接着上一篇.hibernate的get()和load()介绍一

其实,get()和load()的实现机制也是不一样的,当然这是更深层次的东西,get()查出来的就是当前对象,如果数据库没有数据,那么get()返回的值是空,所以,如果对返回值做操作时,我们要注意空指针了.
load()是延迟装载,等到你用的时候在查询,那么是说我们执行方法什么都不做吗?不是的,load()用的一个代理,执行方法是产生一个代理,这里应该用到了代理的设计模式,并且会创建一个监听,如果任何方法调用了监听,那么,监听触发,进行load()装载.

解决上一个问题,session关闭,load()报错怎么办?
hibernate给出的答案是另一种session————currentSession;
简答说下,正常的session,也就是我们上一篇说到的session,用的时候打开,不用的时候,或者是执行完毕的时候直接关闭,但是currentSession是请求过来打开,到请求结束,响应返回,currentSession关闭,这样,在这个请求中,你随便load().
具体配置:
web.xml重配置

  <filter>
    <filter-name>openSession</filter-name>
    <!--请求来的时候打开session-->
    <filter-class>org.springframework.orm.hibernate4.support.OpenSessionInViewFilter</filter-class>
    <init-param>
      <param-name>sessionFactoryBean</param-name>
      <param-value>sessionFactory</param-value>
    </init-param>
    <!--单例的session,保证资源的不良费-->
    <init-param>
      <param-name>singleSession</param-name>
      <param-value>true</param-value>
    </init-param>
    <!--自动刷新缓存-->
    <init-param>
      <param-name>flushMode</param-name>
      <param-value>AUTO</param-value>
    </init-param>
  </filter>
 <!--截听一切访问并进入session配置-->
  <filter-mapping>
    <filter-name>openSession</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>

currentSession的创建工厂:

public class SessionDaoSupport<T> {

    private SessionFactory sessionFactory;

    public final void setSessionFactory(SessionFactory sessionFactory) {
        this.sessionFactory = sessionFactory;
    }
    //创建getCurrentSession
        public Session currentSession()
    {
        return sessionFactory.getCurrentSession();
    }

}

使用的时候只要继承这个就可以使用了.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值