SpringMVC学习系列-后记 开启项目的OpenSessionInView
本文内容纲要:
在系列的SpringMVC学习系列(12)完结篇的示例项目中,由于当时考虑到OpenSessionInView会对性能有一定的影响,所以就没有配置项目的OpenSessionInView。在mapping文件的配置中比如:Account.hbm.xml为了账户登录系统时查询方便,所以在映射Role时直接采用了lazy="false",而且在Role映射权限Authority时也直接采用了lazy="false",这样登录是方便了,但是在做了账户列表时才意识到即使没有在列表中显示账户的角色信息还是生成了一堆不必要的查询语句来查询角色和权限信息,于是就把lazy="false"改为lazy="true"(默认的即为lazy="true"),那么问题来了:
一是在登录查询时需要在查出来对应的账户后,要再在代码中把账户对应的Role和Role对应的Authority加载出来,这个还说得过去。
二是如果我要再做一个用户列表,比如说是给管理员用的需要显示账户的角色信息,那么就要在对应的serivce中再写一个返回List
对于OpenSessionInViewSpring提供了2中方式,即:OpenSessionInViewFilter和OpenSessionInViewInterceptor,由于示例项目采用的是springmvc框架所以我们就采用OpenSessionInViewInterceptor即拦截器的方式,其实配置很简单在springservlet-config.xml配置文件中添加,如下:
<!--配置义过滤-->
<mvc:interceptors>
<!--开启openSessionInView-->
<beanclass="org.springframework.orm.hibernate4.support.OpenSessionInViewInterceptor">
<propertyname="sessionFactory"ref="sessionFactory"/>
</bean>
<!--自定义的权限拦截验证,如果不定义mvc:mappingpath将拦截所有的URL请求-->
<beanclass="com.website.hpuxiaoyoulu.web.auth.AuthInterceptor"></bean>
</mvc:interceptors>
其中
另外这个OpenSessionInViewInterceptor的写法是针对Spring3.X之后并在配置文件中配置了mvc:annotation-driven的写法,在这个项目中的配置就是在springservlet-config.xml中的:
<!--默认的注解映射的支持-->
<mvc:annotation-drivenvalidator="validator"conversion-service="conversion-service"/>
好了,现在OpenSessionInView已经配置完成了,可以去掉lazy="false",享受OpenSessionInView方便吧。
本文内容总结:
原文链接:https://www.cnblogs.com/liukemng/p/4146245.html