OpenSessionInview

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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的主要内容,如果未能解决你的问题,请参考以下文章

OpenSessionInview

OpenSessionInview

OpensessionInView的理解

hibernate08--OpenSessionInView

OpenSessionInView模式

OpenSessionInView