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 ...
随机推荐
- 【转】PDF电子书分享
http://www.voidcn.com/blog/u013830841/article/p-4343018.html http://www.voidcn.com/blog/u013830841/a ...
- Mac 搭建 SVN 服务器环境
Mac 搭建 SVN 服务器环境 一.创建svn repository svnadmin create /path/svn/pro //仓库位置,svn是svn的目录,pro是一个版本库的目录 PS: ...
- 学习PYTHON之路, DAY 2 - PYTHON 基础 2(基础数据类型)
一 字符串格式化输出 name = 'nikita' age = 18 print ("I'am %s, age is %d") % (name, age) PS: 字符串是 %s ...
- Android实现接口方式注册监听器
初学Android,新手大都倾向使用匿名类的方式注册监听器, 如下: public class MainActivity extends Activity { private Button but ...
- nginx 负载均衡、用数据库存储Session,来实现多站点共享Session[转]
多站点共享Session常见的作法有: 1.使用.net自动的状态服务(Asp.net State Service); 2.使用.net的Session数据库: 3.使用Memcached. 4.使用 ...
- 如何替换掉.net toolStrip控件溢出按钮背景图
在使用.net toolStrip控件的时候, toolStrip里面的item宽度超过本身宽度时,会出现一个溢出按钮:OverflowButton,这个按钮是控件的一个属性,其实也是继承自Tool ...
- MVC模式与三层架构的区别
之前总是混淆MVC表现模式和三层架构模式,为此记录下. 三层架构和MVC是有明显区别的,MVC应该是展现模式(三个加起来以后才是三层架构中的UI层) 三层架构(3-tier application) ...
- springmvc学习第四天
数据类型的转换.格式化.校验 1.数据绑定流程 1. Spring MVC 主框架将 ServletRequest 对象及目标方法的入参实例传递给 WebDataBinderFactory 实例,以创 ...
- quartz.net 使用(一)-执行定时计划任务
一.使用nuget安装所需要的包 Install-Package Quartz 二.实现自己的job继承IJob public class FirstJob : IJob { public void ...
- Java网络应用编程
1,网络连接 (1)用户向服务器发送请求(Socket); (2)服务器向用户发送信息(ServerSocket),一直监听的话用.accept(); 2,信息发送与接收 (1)客户向服务器端发送信息 ...