session 和 sessionfactory 两大类的处理方式

 ----------------------------------------------------将session的开启和关闭写在过滤器里,用来延迟session的生命周期
public void doFilter(ServletRequest request, ServletResponse response, FilterChain filterChain) throws IOException, ServletException {
 try{ 
  Session session=HibernateSessionFactory.getSession();
  request.setAttribute(HIBERNATE_SESSIN_KEY, session);
  filterChain.doFilter(request, response);
 }finally {
  Object obj=request.getAttribute(HIBERNATE_SESSIN_KEY);
  if(obj!=null&&obj instanceof Session){
   Session session=(Session)obj;
   session.close();
  }else{
  }
   
 }
}

---------------------------------------------------将SessioFactory工厂放在临听器里开启和关闭,和服务器生命周期一样
package com.newer.business.web.listener;

import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;

import com.newer.business.util.HibernateSessionFactoryUtils;

public class ContextLoadListener implements ServletContextListener {

 public void contextDestroyed(ServletContextEvent arg0) {
  //关闭SessionFactory
  HibernateSessionFactoryUtils.destory();
 }

 public void contextInitialized(ServletContextEvent arg0) {
  //开启SessionFactory
  HibernateSessionFactoryUtils.init();
 }

}

-----------------------------------------------------创建和消除SessionFactory工厂,并提供获得Session方法
package com.newer.business.util;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;

public class HibernateSessionFactoryUtils {
 private static SessionFactory sessionFactory;
 private static boolean isInit=false;
 
 public static void init(){
  if(!isInit){
   Configuration cfg=new Configuration().configure();
   sessionFactory=cfg.buildSessionFactory();
   isInit=true;
  }else{
   System.out.println("工程已经建起");
  }
 }
 
 public static Session getSession(){
  return sessionFactory.openSession();
 }
 
 public static void destory(){
  if(sessionFactory!=null&&isInit){
   sessionFactory.close();
   isInit=false;
  }
 }
}


 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值