首页 > 代码库 > OpenSessionInview

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="http://www.mamicode.com/">        <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