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

Open Session In View的更多相关文章

  1. Hibernate Open Session In View模式【转】

    来源:http://www.yybean.com/opensessioninviewfilter-role-and-configuration 一.作用 Spring为我们解决Hibernate的Se ...

  2. open Session In View和过滤器配置

    Open Session In View模式的主要思想是:当Web Request(浏览器请求)开始时,自动打开Session,当Web Request结束时,自动关闭Session.也就是说,Ses ...

  3. open Session In View模式

    首先看图说话: ****Open Session In View模式的主要思想是:在用户的每一次请求过程始终保持一个Session对象打开着*** 接下来就是代码: +++++++++++++++++ ...

  4. Spring Open Session In View

    提出:session在应用层就关闭,所以持久化要在应用层,但是到了view层持久化则session已经关闭 解决:session延迟到view层再关闭 原理:session(整个requestScop ...

  5. hibernate open session in view 抛出异常解决方法

    在使用open-session-in-view的时候,如果使用不当,有可能抛出两种异常1,NonUniqueObjectException2,在配合spring使用的时候会可能会抛出org.sprin ...

  6. Oracle V$SESSION详解

    V$SESSION是APPS用户下面对于SYS.V_$SESSION 视图的同义词. 在本视图中,每一个连接到数据库实例中的session都拥有一条记录.包括用户session及后台进程如DBWR,L ...

  7. No Hibernate Session bound to thread, and configuration does not allow creat

    No Hibernate Session bound to thread, and configuration does not allow creat 今天遇到这么一个错误,在网上差了很多都没有能解 ...

  8. Spring与Hibernate集成中的Session问题

    主要讨论Spring与Hibernate集成中的session问题 1.通过getSession()方法获得session进行操作 public class Test extends Hibernat ...

  9. PHP学习2 — PHP Cookie 与 Session

    PHP Cookies cookie 常用于识别用户.cookie 是服务器留在用户计算机中的小文件.每当相同的计算机通过浏览器请求页面时,它同时会发送 cookie.通过 PHP,您能够创建并取回 ...

随机推荐

  1. cdh4.1.2 hadoop和oozie集成问题

    1.异常信息例如以下: Caused by: com.google.protobuf.ServiceException: java.net.ConnectException: Call From sl ...

  2. HDU 蟠桃记

    蟠桃记 Time Limit : 2000/1000ms (Java/Other)   Memory Limit : 65536/32768K (Java/Other) Total Submissio ...

  3. sqlite3经常使用命令&amp;语法

    http://blog.csdn.net/linchunhua/article/details/7184439 sqlite数据库仅仅用一个文件就ok,小巧方便,所以是一个很不错的嵌入式数据库,SQL ...

  4. Java调用天气Webservice的小应用

    废话不多说,直接贴代码: CityReq.java package com.weather; import javax.xml.bind.annotation.XmlElement; import j ...

  5. Web文件管理:elFinder.Net(支持FTP)

    elFinder 是一个基于 Web 的文件管理器,灵感来自 Mac OS X 的 Finder 程序. elFinder.Net是.Net版本的一个Demo,使用ASP.NET MVC 4集成,可以 ...

  6. (转)HiddenField控件的使用

    ASP.NET2.0 HiddenField控件(1)2007-05-12 23:18HiddenField控件顾名思义就是隐藏输入框的服务器控件,它能让你保存那些不需要显示在页面上的且对安全性要求不 ...

  7. (转)VS无法启动调试:“生成下面的模块时,启用了优化或没有调试信息“

    中调试项目遇到错误提示,Visual Studio 2010(或VS2008或VS2005)启动调试的时候,弹出提示信息: 生成下面的模块时,启用了优化或没有调试信息: C:\WINDOWS\Micr ...

  8. 爆炸!iOS资源大礼包(持续更新...)

    今天为大家整理了一些关于iOS学习的干货,献给正在奋斗的你们,首先声明一下,在整理的过程中参考了大量的博客和文章,知识的分享终究会增值,在此表示感谢,希望这篇文章给大家带来帮助. 基础部分: C语言教 ...

  9. Swift - IBOutlet返回nil(fatal error: unexpectedly found nil while unwrapping an Optional value)

    在Swift 中 ViewController 默认构造方法不关联同名的xib文件 在使用OC的时候,调用ViewController的默认构造函数,会自动关联到一个与ViewController名字 ...

  10. 武汉科技大学ACM :1009: 零起点学算法63——弓型矩阵

    Problem Description 输出n*m的弓型矩阵 Input 多组测试数据 每组输入2个整数 n和m(不大于20) Output 输出n*m的弓型矩阵,要求左上角元素是1,(每个元素占2个 ...