单独使用hibernate处理事务

  本来只用hibernate开发,从而可以省了DAO层实现数据库访问和跨数据库,也可以对代码进行更好的封装,当我们web中单独使用hibernate时,我们需要单独的处理hibernate的事务,我是使用filter来对事务进行控制的:

  单独使用hibernate使用filter进行事务控制:

01 public class HibernateSessionFilter implements Filter {

02

03     public void destroy() {

04

05     }

06

07     public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException,

08             ServletException {

09         Session session = HibernateUtils.openSession();

10         Transaction tx = null;

11         try {

12             tx = session.beginTransaction();

13             chain.doFilter(request, response);

14             tx.commit();

15         } catch (Exception e) {

16             if (tx != null) {

17                 tx.rollback();

18             }

19             throw new RuntimeException(e);

20         } finally {

21             HibernateUtils.closeAndRemoveSession();

22         }

23     }

24

25     public void init(FilterConfig arg0) throws ServletException {

26     }

27

28 }

  web.xml

01 <filter>

02   <filter-name>hibernateSessionFilter</filter-name>

03   <filter-class> syx.jpkc.filter.HibernateSessionFilter</filter-class>

04 </filter>

05 <filter-mapping>

06   <filter-name>hibernateSessionFilter</filter-name>

07   <url-pattern>*.syx</url-pattern>

08   <url-pattern>*.jsp</url-pattern>

09   <url-pattern>*.eve</url-pattern>

10 </filter-mapping>

  我主要在servlet(*.syx,*.eve)和jsp页面(没用struts)需要和数据库操作,所以需要使用事务处理。

  上面我们还用到了一个 HibernateUtils的小工具类,主要为了获取Session对象和一点优化:

  HibernateUitls.java

01 public class HibernateUtils {

02     private static Map<Thread, Session> sessionMap;

03     private static SessionFactory sessionFactory;

04     static {

05         sessionMap = new HashMap<Thread, Session>();

06         sessionFactory = new Configuration().configure().buildSessionFactory();

07     }

08

09     /**

10      * can only use in web filter, beause it should remove and clear resources

11      * @return

12      */

13     public static Session openSession() {

14         System.out.println(Thread.currentThread().getStackTrace()[1] + " run in " + new Date());

15         Session session = sessionMap.get(Thread.currentThread());

16         if (session == null) {

17             session = sessionFactory.openSession();

18             sessionMap.put(Thread.currentThread(), session);

19         }

20         return session;

21     }

22     public static Session getCurrentSession() {

23         return sessionMap.get(Thread.currentThread());

24     }

25

26     public static void closeAndRemoveSession() {

27         System.out.println(Thread.currentThread().getStackTrace()[1]+ " run in " + new Date());//

28         Session session = sessionMap.remove(Thread.currentThread());

29         if (session != null) {

30             session.close();

31         }

32     }

33 } 
01 public class HibernateUtils {

02     private static Map<Thread, Session> sessionMap;

03     private static SessionFactory sessionFactory;

04     static {

05         sessionMap = new HashMap<Thread, Session>();

06         sessionFactory = new Configuration().configure().buildSessionFactory();

07     }

08

09     /**

10      * can only use in web filter, beause it should remove and clear resources

11      * @return

12      */

13     public static Session openSession() {

14         System.out.println(Thread.currentThread().getStackTrace()[1] + " run in " + new Date());

15         Session session = sessionMap.get(Thread.currentThread());

16         if (session == null) {

17             session = sessionFactory.openSession();

18             sessionMap.put(Thread.currentThread(), session);

19         }

20         return session;

21     }

22     public static Session getCurrentSession() {

23         return sessionMap.get(Thread.currentThread());

24     }

25

26     public static void closeAndRemoveSession() {

27         System.out.println(Thread.currentThread().getStackTrace()[1]+ " run in " + new Date());//

28         Session session = sessionMap.remove(Thread.currentThread());

29         if (session != null) {

30             session.close();

31         }

32     }

33 }

本文转自 wws5201985 51CTO博客,原文链接:http://blog.51cto.com/wws5201985/735587,如需转载请自行联系原作者

hibernate整合进spring后的事务处理相关推荐

  1. 如何免安装服务器将 React 整合进 Spring Boot

    如何免安装服务器将 React 整合进 Spring Boot 下载 Spring Boot 官方 demo 下载 React 官方 demo 开始整合 使用 Spring MVC 控制器导向 Rea ...

  2. Spring与Hibernate整合中,使用OpenSessionInViewFilter后出现sessionFactory未注入问题

    近期在知乎看到一句话,保持学习的有一种是你看到了很多其它的牛人,不甘心,真的不甘心. Spring和hibernate整合的时候,jsp页面做展现,发现展现属性出现: org.apache.jaspe ...

  3. Struts+Spring+Hibernate整合入门详解

    标签: strutshibernatespringbeanactionimport 2007-08-12 16:05 36280人阅读 评论(13) 收藏 举报 分类: STRUTS&SPRI ...

  4. Spring+Hibernate整合

    因为整合spring和hibernate所以,需要用到spring里面复写Hibernate的类以有DI和IOC特性 db.sql hibernate_basic数据库 表 person 字段 pid ...

  5. spring入门(11)-spring与hibernate整合完成增删改查的操作(封装HibernateTemplate模版类对象)

    今天是spring的最后一节课,这节课老师讲了spring与hibernate整合完成增删改查的操作,这是很重要的一节课,这也是第一次真正的实现spring结合Hibernate和数据库连接上,下面是 ...

  6. Spring Spring MVC Hibernate 整合备忘

    以下为此三种框架整合配置的详细备注,以及部分问题备忘 项目结构和配置文件可访问 Github 查看 1. pom.xml 尽量使用 Maven 管理项目依赖以减少包引入时的麻烦,以及避免跨开发工具问题 ...

  7. spring+springmvc+hibernate 整合

    三大框架反反复复搭了很多次,虽然每次都能搭起来,但是效率不高.最近重新搭了一次,理顺了思路,整理了需要注意的地方,分享出来. 工具:Eclipse(jdk 1.7) spring和hibernate版 ...

  8. spring+struts2+hibernate整合

    本文介绍   1.Struts2+Spring2.5+Hibernate3.3的整合  2.采用单元测试  3.加入了lob类型的操作配置  4.介绍oralce驱动 本文采用oracle11g  5 ...

  9. Java程序员从笨鸟到菜鸟之(七十九)细谈Spring(八)spring+hibernate整合基本详解

    由于spring和hibernate处于不同的层次,Spring关心的是业务逻辑之间的组合关系,Spring提供了对他们的强大的管理能力, 而Hibernate完成了OR的映射,使开发人员不用再去关心 ...

最新文章

  1. objective-c abort() 与 exit() 函数的区别
  2. 布巴内斯瓦尔成智慧城市 印小城何以“智慧”
  3. 电气期刊论文实现:热电联产经济调度【有代码】
  4. java登录界面命令_Java命令行界面(第13部分):JArgs
  5. pythonmysqldb_python中MySQLdb的使用
  6. java图片特效轮播代码_JQuery实现图片轮播效果
  7. Java计算1除以3结果为0_关于java:Int division:为什么1/3 == 0的结果?
  8. 高质量C /C编程指南---序言
  9. 【每日算法Day 72】谷歌面试题:又双叒叕是位运算,最详细的自动机推导过程...
  10. java课程设计---彩票销售管理系统
  11. 多个中间件_小T说:消息中间件,为什么用RabbitMQ及支持的场景
  12. 在线教学质量评价系统java web_基于JavaWeb的教师教学质量评价系统
  13. mapgis编辑属性结构编辑不了_在win 7系统中MAPGIS的区属性结构修改不了,而且出现死机...
  14. 好佳居软装十大品牌 软装可以提升格调
  15. python3 输出中文、日文等等乱码问题的解决办法
  16. C语言----文件存储
  17. HTML学生个人网站作业设计:电影网站设计——漫威电影(2页) HTML+CSS+JavaScript 简单DIV布局个人介绍网页模板代码 DW学生个人网站制作成品下载
  18. LoRa节点ABP入网方式怎么样
  19. js复数类的学习和使用
  20. 困扰我多年的印度人点头摇头问题

热门文章

  1. SAP PM入门系列33 - IP16 维修计划报表
  2. 无人机将在未来的智慧城市中扮演重要角色
  3. 「走过」微软、优步,老工程师告诉你哪些数据结构和算法最重要
  4. 30年前过气老论文,为何能催生革命全球的CNN框架?
  5. 原理解释|直觉与实现:Batch Normalization
  6. 图像识别落地机会最多 腾讯全面输出视觉AI
  7. CIO和CTO到底有什么不同?
  8. 学 AI 和机器学习的人必须关注的 6 个领域
  9. 使用Java程序消费SAP Leonardo的机器学习API
  10. 现场丨李开复、李飞飞等大佬集聚达沃斯,解读中国的AI优势