OpenSessionInView模式

首先搭建建构

引入jar包

创建实体类  Emp.java

public class Emp {
    private Integer empId;//员工ID
    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;
    }

}

配置大配置

<hibernate-configuration>
   <session-factory>
       <!-- 1.连接数据库的语句 -->
        <property name="connection.driver_class">oracle.jdbc.OracleDriver</property>
        <property name="connection.url">jdbc:oracle:thin:@localhost:1521:orcl</property>
        <property name="connection.username">scott</property>
        <property name="connection.password">0123</property>

        <!-- 输出所有 SQL 语句到控制台。 -->
        <property name="hibernate.show_sql">true</property> 

        <!-- 在 log 和 console 中打印出更漂亮的 SQL。 -->
        <property name="hibernate.format_sql">true</property>
        <!-- 方言 -->
        <property name="hibernate.dialect">    org.hibernate.dialect.Oracle10gDialect</property>

         <!-- hbm2ddl -->
         <property name="hibernate.hbm2ddl.auto">update</property>

         <!-- 支持getCurrentSession的 属性配置 -->
         <property name="hibernate.current_session_context_class">thread</property>
       <!-- 关联小配置 -->

      <!-- <mapping resource="cn/happy/entity/Project.hbm.xml"/> -->
       <mapping resource="entity/Emp.hbm.xml"/>

   </session-factory>

</hibernate-configuration>
    

配置  小配置

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="entity">
    <class name="Emp" table="Emp2">
        <id name="empId" column="EMPID">
            <generator class="native"></generator>
        </id>
        <property name="empname" type="string" column="empname"></property>

        <!-- 多对多 -->
        <!-- <set name="pros" table="ProEmp">
            <key column="nid"></key>
            <many-to-many class="Project" column="pid"></many-to-many>
        </set>-->
    </class>

</hibernate-mapping>

创建HibernateUtil工具类

public class HibernateUtil {

    private static final ThreadLocal sessionTL = new ThreadLocal();
    private static Configuration configuration;
    //
    private  static final SessionFactory sessionFactory;
    static{
        try {
            configuration=new Configuration().configure();
            sessionFactory=configuration.buildSessionFactory();

        } catch (Exception e) {
            throw new ExceptionInInitializerError(e);
        }

    }
    public static Session getSession() {

        Session session = (Session)sessionTL.get();
        if(session==null)
        {
            session = sessionFactory.openSession();
            sessionTL.set(session);
        }
        return session;
    }
    public static void closeSession()
    {
        Session session = (Session)sessionTL.get();
        sessionTL.set(null);
        session.close();

    }

}

搭建Dao

package dao;

import java.io.Serializable;

import util.HibernateUtil;

public class Mydao {
    public Object  get(Class clazz,Serializable id){
           System.out.println("dao\t"+HibernateUtil.getSession());
           Object result= HibernateUtil.getSession().load(clazz, id);
           return result;
    }

}

biz层

public class Hibernatebiz {
    Mydao dao=new Mydao();
    public Object get(Class clazz,Serializable id){
          // Transaction tx = HibernateUtil.getSession().beginTransaction();
           Object obj= dao.get(clazz, id);
           System.out.println("==============================================");
         //  tx.commit();
          // HibernateUtil.closeSession();
           return obj;
    }

}

filter类

public class MyFilter implements Filter{

    public void destroy() {
        // TODO Auto-generated method stub

    }

    public void doFilter(ServletRequest request, ServletResponse response,
            FilterChain chain) throws IOException, ServletException {
        Session session;
        Transaction tx=null;
        try {
            session=HibernateUtil.getSession();
            tx=session.beginTransaction();
            chain.doFilter(request, response);
            tx.commit();

        } catch (Exception e) {
            e.printStackTrace();
            tx.rollback();
        }
        finally{
            HibernateUtil.closeSession();
        }

    }

最后编写测试类

public class H_01Test {
    @Test
    public void addTest(){
        Hibernatebiz biz=new Hibernatebiz();
        Object object = biz.get(Emp.class,1);
        Emp emp=(Emp)object;
        System.out.println(emp.getEmpname());

    }

}

结果:

时间: 2024-10-15 19:41:38

OpenSessionInView模式的相关文章

[转]OpenSessionInView模式

OpenSessionInView模式解决的问题:   * hibernate事物边界问题 * 因session关闭导致hibernate延迟加载例外的问题 事物边界: 一个事物的完成应该是在业务层完成的,但是事物的创建却是在数据层来做,这样必定造成业务层和数据层耦合性增强. 延迟加载例外: 如你所知,延迟加载使用了动态代理机制,只有在真正使用这个对象的时候才会去访问数据库,但是如果在数据层进行了事物提交,session关闭,再去访问 数据就会导致延迟加载例外异常,所以我们必须加大session

hibernate之OpenSessionInView模式代码

import javax.servlet.FilterConfig; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; import org.hibernate.Session; import org.hibernate.Transaction; import util.HibernateUtil; public cla

openSessionInview的原理

在web.xml中 <filter> <filter-name>OpenSessionInViewFilter</filter-name> <filter-class>org.springframework.orm.hibernate3.support.OpenSessionInViewFilter</filter-class> </filter> <filter-mapping> <filter-name>O

SpringMVC + spring3.1.1 + hibernate4.1.0 集成及常见问题总结

一 开发环境 1.动态web工程 2.部分依赖 java代码: hibernate-release-4.1.0.Final.zip hibernate-validator-4.2.0.Final.jar spring-framework-3.1.1.RELEASE-with-docs.zip proxool-0.9.1.jar log4j 1.2.16 slf4j -1.6.1 mysql-connector-java-5.1.10.jar hamcrest 1.3.0RC2 ehcache 2

spring,hibernate,struts整合

SSH整合: Spring与Hibernate整合 Spring与Struts整合 整合步骤:---------------------------------------------->本人使用的是struts2.3.4.1   hibernate3.6.0  spring3.2.5 1.导入jar文件 1)struts jar文件-->如何找? -->去源码包中struts-2.3.4.1\apps\struts-blank.war -->使用压缩文件打开struts-blan

注意Hibernate4在开发当中的一些改变

Hibernate4的改动较大只有spring3.1以上版本能够支持,Spring3.1取消了HibernateTemplate,因为Hibernate4的事务管理已经很好了,不用Spring再扩展了.这里简单介绍了hibernate4相对于hibernate3配置时出现的错误,只列举了问题和解决方法,详细原理如果大家感兴趣还是去自己搜吧,网上很多. Spring3.1去掉了HibernateDaoSupport类.hibernate4需要通过getCurrentSession()获取sessi

从MVC和三层架构说到ssh整合开发-下

这章主要讲整合开发,直接从实战讲起,对与ssh的单方面了解,请继续等待我的兴许文章. 解说不到位的地方欢迎大家指正:联系方式rlovep.com 具体请看源码凝视: 全部代码下载(csdn):链接 Github链接:链接https://github.com/wpeace1212/javaBlog/tree/master/sshDemo 写文章不易,欢迎大家採我的文章,以及给出实用的评论.当然大家也能够关注一下我的github.多谢. 1.整合流程 针对一个简单项目.让大家对三层机构和MVC有一个

SSH(一)

系统程序架构:    整合思路        1.逆依赖方向而行,由Spring提供对象管理和服务        2.依次实现Spring与Hibernate.Spring与Struts2的集成 配置web.xml文件:    1.设置Spring配置文件        Spring配置文件的存放位置,若文件放置在/WEB-INF/目录下且名称为applicationContext.xml,可以不配置此项    范例: 1 <context-param> 2 <param-name>

Java多线程及JDK5线程工具类总结

内容摘抄来自:传智播客 张孝祥 老师的<Java高新技术>视频,   并加入了个人总结和理解. 虽然我没有参加过任何培训班,但我很大一部分知识都来自于传智播客的网络分享视频. 十分真挚的感谢张老师的公开视频. 1.传统线程技术的回顾 1 import org.junit.Test; 2 /** 3 * 传统线程回顾 4 * 多线程不一定会提高运行效率,和CPU设计和架构有关. 5 * 多线程下载是抢了服务器的资源,并不是自身的机器加快. 6 * @author LiTaiQing 7 */ 8