spring_SSH整合之_OpenSessionInView

47 篇文章 0 订阅
40 篇文章 0 订阅

HibernateTemplate中的load和get都可以取回一个对象,难道是方法重复吗?绝对不可能,那它们到底有那些区别呢?

一、load有加载延时,需要设置lazy属性,我没有配置lazy的时候,报错,加上了lazy="false"属性时,用load才没有报错

二、当记录不存在时,load产生异常,get返回null

三、load方法可以返回实体的代理类,get方法则返回真是的实体类
四、load方法可以充分利用hibernate的内部缓存和二级缓存中的现有数据

      而get方法仅仅在内部缓存中进行数据查找,如果没有发现数据則将越过二级缓存,直接调用SQL查询数据库
五、也许别人把数据库中的数据修改了,load如何在缓存中找到了数据,则不会再访问数据库,而get则会返回最新数据。

在使用load这个方法时要配置openSessionInView延长Session关闭时间
在Web.xml文件中配置filter的openSessionInView关闭Session,告诉spring等jsp执行完了再关闭Session。
必须放到Struts2的filter前面

<!-- 由OpenSessionInView关闭Session,告诉spring等jsp执行完了再关闭Session -->
<filter>
	<filter-name>openSessionInView</filter-name>
	<filter-class>org.springframework.orm.hibernate3.support.OpenSessionInViewFilter</filter-class>
</filter>

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

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
	http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">

	<!-- Spring监听器 -->
	<context-param>
		<param-name>contextConfigLocation</param-name>
		<!-- 去classpath下找一个叫beans.xml文件 -->
		<param-value>classpath:beans.xml</param-value>
	</context-param>
	<listener>
		<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
	</listener>

	<!-- 由OpenSessionInView关闭Session,告诉spring等jsp执行完了再关闭Session -->
	<filter>
		<filter-name>openSessionInView</filter-name>
		<filter-class>org.springframework.orm.hibernate3.support.OpenSessionInViewFilter</filter-class>
	</filter>

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

	<!-- Struts2过滤器 -->
	<filter>
		<filter-name>struts2</filter-name>
		<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
	</filter>

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

	<!-- 默认页面 -->
	<welcome-file-list>
		<welcome-file>index.jsp</welcome-file>
	</welcome-file-list>
</web-app>
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
	"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
	"http://struts.apache.org/dtds/struts-2.3.dtd">

<struts>
	<!-- 指定打开.jsp页面默认编码 -->
	<constant name="struts.i18n.encoding" value="UTF-8" />
	<!-- 与spring集合时,指定由spring负责action对象的创建(自动装配) -->
	<constant name="struts.objectFactory.spring.autoWire" value="type" />
	<!-- 开发模式下使用,这样可以打印出理详细的错误信息 -->
	<constant name="struts.dewMode" value="true" />

	<package name="registration" namespace="/bjsxt" extends="struts-default">
		<action name="user_*" class="com.bjsxt.registration.action.UserAction"
			method="{1}">
			<result name="SUCCESS">/registSuccess.jsp</result>
			<result name="FAIL">/registFail.jsp</result>
			<!-- 使用重定向jsp页面取不到list值 -->
			<!-- <result name="LIST" type="redirect">/userlist.jsp</result> -->
			<result name="LIST">/userlist.jsp</result>
			<result name="LOAD">/user.jsp</result>
		</action>
	</package>

</struts>


package com.bjsxt.registration.action;

import java.util.List;

import com.bjsxt.registration.model.User;
import com.bjsxt.registration.service.UserManager;
import com.bjsxt.registration.vo.UserRegisterInfo;
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;

public class UserAction extends ActionSupport implements
		ModelDriven<UserRegisterInfo> {
	private UserRegisterInfo info;
	private UserManager userManager;
	private List<User> users;
	private User user;

	public User getUser() {
		return user;
	}

	public void setUser(User user) {
		this.user = user;
	}

	public UserRegisterInfo getInfo() {
		return info;
	}

	public void setInfo(UserRegisterInfo info) {
		this.info = info;
	}

	public UserManager getUserManager() {
		return userManager;
	}

	public void setUserManager(UserManager userManager) {
		this.userManager = userManager;
	}

	public List<User> getUsers() {
		return users;
	}

	public void setUsers(List<User> users) {
		this.users = users;
	}

	@Override
	public String execute() throws Exception {
		User user = new User();
		user.setUsername(info.getUsername());
		user.setPassword(info.getPassword());
		if (userManager.exists(user)) {
			return "FAIL";
		}
		userManager.add(user);
		return "SUCCESS";
	}

	public UserRegisterInfo getModel() {
		return info;
	}

	public String list() {
		this.users = this.userManager.getUsers();
		return "LIST";
	}

	public String load() {
		this.user = this.userManager.loadById(info.getId());
		return "LOAD";
	}
}

<%@ page language="java" import="java.util.*" pageEncoding="GB18030"%>
<%@ taglib uri="/struts-tags" prefix="s"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>

<title>load列表</title>

<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
</head>

<body>
	<a href="bjsxt/user_list.action">用户列表</a>
	<br />
	<s:property value="user.username" />
	<s:debug></s:debug>
</body>
</html>

package com.bjsxt.registration.action;

import java.util.List;

import org.springframework.context.ApplicationContext;

import com.bjsxt.registration.model.User;
import com.bjsxt.registration.service.UserManager;
import com.bjsxt.registration.vo.UserRegisterInfo;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;

public class UserAction extends ActionSupport implements
		ModelDriven
   
   
    
     {
	private UserRegisterInfo info;
	private UserManager userManager;
	private List
    
    
     
      users;

	public UserRegisterInfo getInfo() {
		return info;
	}

	public void setInfo(UserRegisterInfo info) {
		this.info = info;
	}

	public UserManager getUserManager() {
		return userManager;
	}

	public void setUserManager(UserManager userManager) {
		this.userManager = userManager;
	}

	public List
     
     
      
       getUsers() {
		return users;
	}

	public void setUsers(List
      
      
       
        users) {
		this.users = users;
	}

	@Override
	public String execute() throws Exception {
		User user = new User();
		user.setUsername(info.getUsername());
		user.setPassword(info.getPassword());
		if (userManager.exists(user)) {
			return "FAIL";
		}
		userManager.add(user);
		return "SUCCESS";
	}

	public UserRegisterInfo getModel() {
		return info;
	}

	public String list() {
		this.users = this.userManager.getUsers();
		return "LIST";
	}
}

       
       



       
        
         
         
         
         
         
         
         
          
          
            /registSuccess.jsp 
           
          
            /registFail.jsp 
           
           
           
          
            /userlist.jsp 
           
          
         
       
<%@ page language="java" import="java.util.*" pageEncoding="GB18030"%>
<%@ taglib uri="/struts-tags" prefix="s"%>






       
       用户列表


       
       

       
       

       
       



	
       
        
       
       
       
用户名密码

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值