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<Account>的方法并在方法里面循环获取的List<Account>对象并加载item的Role然后返回,这样的话虽然和不显示角色信息的账户列表调用的service方法返回的结果类型一样(即使查询条件也一样),仍然不能调用同样的方法。导致仅仅是界面展示同种对象的不同信息就要多写一堆代码(而且没有多大意义,还不便于维护),那么就把OpenSessionInView请出来吧。
对于OpenSessionInView Spring提供了2中方式,即:OpenSessionInViewFilter和OpenSessionInViewInterceptor,由于示例项目采用的是spring mvc框架所以我们就采用OpenSessionInViewInterceptor即拦截器的方式,其实配置很简单在springservlet-config.xml配置文件中添加,如下:
<!-- 配置义过滤 -->
<mvc:interceptors>
<!-- 开启openSessionInView -->
<bean class="org.springframework.orm.hibernate4.support.OpenSessionInViewInterceptor">
<property name="sessionFactory" ref="sessionFactory" />
</bean>
<!-- 自定义的权限拦截验证,如果不定义 mvc:mapping path 将拦截所有的URL请求 -->
<bean class="com.website.hpuxiaoyoulu.web.auth.AuthInterceptor"></bean>
</mvc:interceptors>
其中<property name="sessionFactory" ref="sessionFactory" />就是在springcontext-config.xml配置文件中的事物配置,可以参考示例项目的配置文件。
另外这个OpenSessionInViewInterceptor的写法是针对Spring 3.X之后并在配置文件中配置了mvc:annotation-driven的写法,在这个项目中的配置就是在springservlet-config.xml中的:
<!-- 默认的注解映射的支持 -->
<mvc:annotation-driven validator="validator" conversion-service="conversion-service" />
好了,现在OpenSessionInView已经配置完成了,可以去掉lazy="false",享受OpenSessionInView方便吧。
SpringMVC学习系列-后记 开启项目的OpenSessionInView的更多相关文章
- SpringMVC学习系列-后记 解决GET请求时中文乱码的问题
SpringMVC学习系列-后记 解决GET请求时中文乱码的问题 之前项目中的web.xml中的编码设置: <filter> <filter-name>CharacterEnc ...
- SpringMVC学习系列-后记 结合SpringMVC和Hibernate-validator,根据后台验证规则自动生成前台的js验证代码
在SpringMVC学习系列(6) 之 数据验证中我们已经学习了如何结合Hibernate-validator进行后台的数据合法性验证,但是通常来说后台验证只是第二道保险,为了更好的用户体验会现在前端 ...
- 系列文章:老项目的#iPhone6与iPhone6Plus适配#(持续更新中,更新日期2014年10月12日 星期日 )
本文永久地址为http://www.cnblogs.com/ChenYilong/p/4020399.html ,转载请注明出处. ********************************** ...
- SpringMVC学习系列(2) 之 经典的HelloWorld实现
前一篇简单介绍了Spring MVC的一些知识,下面就要开始学习如何把Spring MVC运用到具体的项目中去. 首先还是从一个简单的Hello World项目说起: 我机器的开发环境为: Ubunt ...
- SpringMVC学习系列(12) 完结篇 之 基于Hibernate+Spring+Spring MVC+Bootstrap的管理系统实现
到这里已经写到第12篇了,前11篇基本上把Spring MVC主要的内容都讲了,现在就直接上一个项目吧,希望能对有需要的朋友有一些帮助. 一.首先看一下项目结构: InfrastructureProj ...
- SpringMVC学习系列(10) 之 异常处理
在项目中如何处理出现的异常,在每个可能出现异常的地方都写代码捕捉异常?这显然是不合理的,当项目越来越大是也是不可维护的.那么如何保证我们处理异常的代码精简且便于维护呢?这就是本篇要讲的内容—>异 ...
- SpringMVC学习系列(1) 之 初识SpringMVC
1.前言: 与SpringMVC的结识源于个人之前想做一个微信公众账号的管理平台玩玩,既然要做就需要考虑平台的选择问题.由于我的朋友只有一台运行了Linux系统的虚拟主机,且上面还运行有他自己的一些论 ...
- SpringMVC学习系列(11) 之 表单标签
本篇我们来学习Spring MVC表单标签的使用,借助于Spring MVC提供的表单标签可以让我们在视图上展示WebModel中的数据更加轻松. 一.首先我们先做一个简单了例子来对Spring MV ...
- SpringMVC学习系列(3) 之 URL请求到Action的映射规则
在系列(2)中我们展示了一个简单的get请求,并返回了一个简单的helloworld页面.本篇我们来学习如何来配置一个action的url映射规则. 在系列(2)中我们在HelloWorldContr ...
随机推荐
- UIApplication sharedApplication详细解释-IOS
iPhone应用程序是由主函数main启动,它负责调用UIApplicationMain函数,该函数的形式如下所示: int UIApplicationMain ( int argc, char *a ...
- HTML与XHTML
HTML:超文本标记语言,基本的网页设计语言 XHTML:基于XML的严格版的HTML XHTML相对于HTML的区别: 标签正确嵌套.标签必须有结束标记.区分大小写.属性值要用双引号.id代替nam ...
- 在python中使用图形库matplotlib
matplotlib is a python 2D plotting library which produces publication quality figures in a variety o ...
- PHP 扩展开发小结
1. 变量操作(常量) 设置变量 ZVAL_*系列函数; 例: zval t; ZVAL_STRING(t,"10",2); 获取变量 Z_* 系列函数 获取变量指针 Z_*_P ...
- JQ判断屏幕宽度
<script> if (screen.width < 768){....} </script>
- org.springframework.web.context.ContextLoaderListener(转载)
ContextLoaderListener的作用就是启动Web容器时,自动装配ApplicationContext的配置信息.因为它实现了ServletContextListener这个接口,在web ...
- git中通过实际操作来了解常用命令
基本的6个命令 常用的就下面6个命令,但是详细的可能有上百个命令. 还需要特别了解git的几个名词,workspace:工作区,Index/Stage:暂存区,Respository:本地仓库,Rem ...
- 解决html中 在不同浏览器中占位大小不统一的问题
直接在html文档中使用 来表示空格,在不同浏览器中的占位大小是不一样的. 为什么呢,因为不同浏览器默认的字体是不一样的,不同字体下的空格表示 占位大小不一致. 这就好办了嘛,我们对 指定使用同样的字 ...
- cocos2d-x 中的基本概念
在 cocos2d-x 开头配置(Windows 平台)中,介绍了新建工程,这篇就介绍下 cocos2d-x 的一些概念.(前提是需要有C++的面向对象的基本知识和C++11的常用知识) 层,场景,导 ...
- ANT build.xml文件详解
Ant的优点 跨平台性.Ant是用Java语言编写的,所示具有很好的跨平台性. 操作简单.Ant是由一个内置任务和可选任务组成的. Ant运行时需要一个XML文件(构建文件). Ant通过调用targ ...