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"%>
用户列表
用户名 密码