关于spring整合前两大框架的一些小问题04

关于spring中对延迟关闭session的配置,以及工具类BaseDao和BaseAction

一、HibernateTemplate执行查询时的一些小问题

1.当两个PO类的关系是多对一时:

  我们知道在多对一关系中,查询总是会先查询“一”的一方,而一的一方中是含有集合的,一谈到集合就不得不考虑关于hibernate中集合的加载策略,

集合的加载策略默认是懒加载的,我们可以自己手动的去配guanlu置这个加载策略!

  然而我们这里讨论的是:当查询“一”的一方的数据完毕时session就会被关闭,而集合中的数据并没有加载所以在页面想获取时是获取不到的,我们想要懒加载能加载到数据,所以必须要延迟关闭session这样才能保证能查询到数据!

  而这里我们想要延迟关闭session应该怎么做呢?spring提供了一个过滤器OpenSessionInViewFilter,只要请求还没有结束就不会关闭session

在web.xml中配置这样一个过滤器

<!-- 延迟关闭session的过滤器 ,这个过滤器是由spring提供的 需要在struts过滤器之前执行才可以这样一来session就是由我们这个过滤器创建的,到时候关闭也是由过滤器延迟关闭-->
<filter>
<filter-name>openSession</filter-name>
<filter-class>org.springframework.orm.hibernate3.support.OpenSessionInViewFilter</filter-class>
</filter>

<filter-mapping>
<filter-name>openSession</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>

二、关于工具类BaseDao的思想与编写!

1.根据项目代码可知,我们在Dao层操作的代码很多都是重复性很大的代码,而人对于重复性的东西是能简化就简化的,例如增删改查基本上在每个Dao中的相似性极高,我们就可以将重复性的代码抽取出来,将其写成一个工具类,然后以后的Dao只需要去继承这个类即可,不需要再去写一些重复性的代码!

2.思想的构图如下:

     

在这里我们要附带介绍一下this关键字

this是指当前运行时类的对象,不是指当前对象,注意 观察下面代码的结果

public class Parent {
    public void init(){
        System.out.println("我是Parent的init 1");
        this.demo();
    }

    public void demo(){
        System.out.println("我是Parent 的 demo 2");
    }
}
public class Child extends Parent {
@Test
public void fun(){
    init();
}
    //研究发现this关键字,是指的运行时类的对象
    public void init(){
        super.init();
        System.out.println("我是Child的 init 3");
        this.demo();
    }
    public void demo(){
        System.out.println("我是Child的demo 4");
    }
}

运行后的结果为:

我是Child的 init 1
我是Child的 init 4
我是Child的 init 3
我是Child的 init 4
所以this指的是当前运行时类的对象


猜你喜欢

转载自www.cnblogs.com/zwxbky/p/11403101.html