OpenSessionInview
Open Session In View模式的主要思想是:在用户的每一次请求过程始终保持一个Session对象打开着

实现步骤:
步骤一.创建一个Web项目,创建包cn.happy.util,创建HibernateUtil工具类
public class HibernateUtil{
private static final ThreadLocal sessionTL=new ThreadLocal();
private static Configuration cfg;
private final static SessionFactory factory;
static{
cfg=new Configuration().configure();
factory=cfg.buildSessionFactory();
}
public static Session currentSession()
{
Session session=(Session)sessionTL.get();
if(session==null)
{
session=factory.openSession();
sessionTL.set(session);
}
return session;
}
public static void closeSession()
{
Session session=(Session) sessionTL.get();
sessionTL.set(null);
session.close();
}
}
步骤二.创建包cn.happy.entity,创建实体类Emp和Emp.hbm.xml小配置文件
public class Emp {
private Integer empId;
private String empName;
public Integer getEmpId() {
return empId;
}
public void setEmpId(Integer empId) {
this.empId = empId;
}
public String getEmpName() {
return empName;
}
public void setEmpName(String empName) {
this.empName = empName;
}
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="cn.happy.entity">
<class name="Emp" table="Emps">
<id name="empId">
<generator class="native">
</generator>
</id>
<property name="empName"></property>
<!-- 植入一个Dept对象 多对一 -->
</class>
</hibernate-mapping>
步骤三.创建包cn.happy.Dao创建类MyDao
public class MyDao{
public Object get(Class classz,Serializable id)
{
Object obj=HibernateUtil.currentSession().load(classz,id);
return obj;
}
}
步骤四.创建包cn.happy.biz创建类MyBiz
public class MyBiz
{
public Object get(Class classz,Serializable id)
{
MyDao dao=new MyDao();
Obejct obj=dao.get(classz,id);
return obj;
}
}
步骤五.创建cn.happy.filter包创建类MyFilter,实现Filter接口,重写doFilter方法
public void doFilter(ServletRequet request,ServletResponse response,FilterChain arg2) throw IOException,ServletExption{
Session session=null;
Transaction tx=null;
session=HibernateUtil.currentSession();
tx=session.beginTransaction();
arg2.doFilter(request,response);
tx.commit();
HibernateUtil.closeSession();
}
步骤六.创建大配置文件hibernate.cfg.xml
<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<!-- Database connection settings 数据库连接设置 -->
<!-- 驱动类 -->
<property name="connection.driver_class">oracle.jdbc.OracleDriver</property>
<!-- url地址 -->
<property name="connection.url">jdbc:oracle:thin:@localhost:1521:orcl</property>
<property name="connection.username">Hibernate</property>
<property name="connection.password">orcl</property>
<!-- SQL dialect (SQL 方言) -->
<property name="dialect">org.hibernate.dialect.Oracle10gDialect</property>
<!--在控制台打印后台的SQL语句 -->
<property name="show_sql">true</property>
<!-- 格式化显示SQL -->
<!-- <property name="format_sql">true</property> -->
<!-- 自动生成表 -->
<property name="hbm2ddl.auto">update</property>
<!-- 关联小配置 -->
<mapping resource="cn/happy/entity/Emp.hbm.xml" />
</session-factory>
</hibernate-configuration>
步骤七.在web.xml文件中配置fileter
<?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">
<display-name></display-name>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<filter>
<filter-name>openSessionInview</filter-name>
<filter-class>cn.happy.Filter.MyFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>openSessionInview</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>
然后我们在index.xml文件中来显示数据
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%@page import="org.hibernate.Session"%>
<%@page import="cn.happy.Util.HibernateUtil" %>
<%@page import="org.hibernate.Transaction" %>
<%@page import="cn.happy.Biz.MyBiz" %>
<%@page import="cn.happy.entity.Emp" %>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>OpenSessionInview</title>
</head>
<body>
<%
MyBiz biz=new MyBiz(); <!--拿到id为1的员工,在页面显示名字-->
Object object = biz.get(Emp.class, 1);
Emp emp=(Emp)object;
%>
<%=emp.getEmpName() %>
</body>
</html>
这样我们就实现了OpenSessionInview

OpenSessionInview的更多相关文章
- SpringMVC学习系列-后记 开启项目的OpenSessionInView
在系列的 SpringMVC学习系列(12) 完结篇 的示例项目中,由于当时考虑到OpenSessionInView会对性能有一定的影响,所以就没有配置项目的OpenSessionInView.在ma ...
- 细说OpenSessionInView问题
[环境参数] 环境:SSH框架 [问题描述] NoSession问题 HibernateTemplate对象提供的方法如果使用“延迟加载”,Session对象的管理不受开发者控制,此时如果在表现层获 ...
- SSH第一篇【整合SSH步骤、OpenSessionInView】
前言 到目前为止,Struts2.Hibernate.Spring框架都过了一遍了.也写过了Spring怎么与Struts2整合,Spring与Hibernate整合-本博文主要讲解SSH的整合 整合 ...
- [转]java框架spring中的opensessioninview有什么作用
在hibernate中使用load方法时,并未把数据真正获取时就关闭了session,当我们真正想获取数据时会迫使load加载数据,而此时 session已关闭,所以就会出现异常. 比较典型的是在MV ...
- [转]OpenSessionInView模式
OpenSessionInView模式解决的问题: * hibernate事物边界问题 * 因session关闭导致hibernate延迟加载例外的问题 事物边界: 一个事物的完成应该 ...
- [转]Java程序员从笨鸟到菜鸟之(八十三)细谈Spring(十二)OpenSessionInView详解及用法
首先我们来看一下什么是OpenSessionInView? 在hibernate中使用load方法时,并未把数据真正获取时就关闭了session,当我们真正想获取数据时会迫使load加载数据,而 ...
- 详细解析Spring事务的配置和OpenSessionInview的作用
1.事务的特性 原子性:事务中的操作是不可分割的一部分 一致性:要么同时成功,要么同时失败(事务执行前后数据保持一致) 隔离性:并发互不干扰 持久性:事务一旦被提交,它就是一条持久 ...
- (转)Spring提供的CharacterEncoding和OpenSessionInView功能
http://blog.csdn.net/yerenyuan_pku/article/details/52902282 前面我们以一种更加优雅的方式集成了Spring4.2.5+Hibernate4. ...
- openSessionInView的使用原理及性能分析
看到好多项目中用到了openSessionInView,这种做法无非是开发方便,能够在JSP页面中操作数据库层方面的业务. 下边说下openSessionInView的使用方法及性能问题. 使用: 1 ...
随机推荐
- SAP 调用RFC 的时候记录异常报错方式
DATA: lv_error TYPE char100. CALL FUNCTION 'ZRFC_WM_ZEL001' DESTINATION lv_desc EXPORTING process_fl ...
- Microsoft SharePoint Server 2013 Service Pack 1 (sp1)终于出来了!!!
Microsoft SharePoint Server 2013 Service Pack 1 终于出来了!以下是下载地址如下,大小1.25G. http://www.microsoft.com/zh ...
- 闲聊桌面应用开发[Win16->Win32->ATL/WTL/MFC->WinForm->WPF/Silverlight/WinRT]
闲来无聊,正好小组人员讨论到桌面的开发,那把笔者接触的WIndows平台下的几个主要的发展过程聊一聊. 主要从概述,参考资料,图书等几个方面说起. 所有的界面开发都会涉及如下的几个方面的内容: v 控 ...
- UIModalPresentationStyle和UIModalTransitionStyle
一.主要用途 弹出模态ViewController是IOS变成中很有用的一个技术,UIKit提供的一些专门用于模态显示的ViewController,如UIImagePickerController等 ...
- RxJava 和 RxAndroid 四(RxBinding的使用)
对Rxjava不熟悉的同学可以先看我之前写的几篇文章 RxJava 和 RxAndroid 一 (基础) RxJava 和 RxAndroid 二(操作符的使用) RxJava 和 RxAndroid ...
- SVN 常识
1.相关博客 http://my.oschina.net/u/1780920/blog/425792 2. 文件红色:表示文件没有添加到服务器 绿色:表示没有更新新的修改到服务器 普通黑色:表示和服务 ...
- Android自定义控件3--优酷菜单执行动画
在上篇文章中实现了优酷菜单的布局,本文接着实现动画功能 本文地址:http://www.cnblogs.com/wuyudong/p/5914901.html,转载请注明源地址. 新建动画工具类Ani ...
- Android ListViewview入门
接着上文<Android 数据库的事务>,往person数据表中插入50条数据 public void testAdd() throws Exception { PersonDao dao ...
- 运算符&,|,^
1.&按位“与”的计算是把两个数字分别写成二进制形式,然后按照每一位进行比较,&计算中,只要有一个是0就算成02.|运算转换成2进制进行比较,两个位只要有一个为1,那么结果就是1,否则 ...
- AFNetworking 3.0.4 的使用
本文永久链接:http://www.cnblogs.com/qianLL/p/5342593.html pod 'AFNetworking', '~>3.0.4' <-------第 ...