博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Spring MVC 事务配置
阅读量:5262 次
发布时间:2019-06-14

本文共 7105 字,大约阅读时间需要 23 分钟。

Spring MVC事务配置

要了解事务配置的所有方法,请看一下》

本文介绍两种配置方法:

 

以下所使用环境为Spring4.0.3、Hibernate4.3.5

 

一、      XML,使用tx标签配置拦截器实现事务

Entity类User.java,持久化类,对应数据库表user

package com.lei.demo.entity;import javax.persistence.*;@Entity(name="users")public class Users {        public Users(){        super();    }        @Id    @GeneratedValue(strategy=GenerationType.AUTO)    @Column(name="id")    private Integer id;        @Column(name="user_name",length=32)    private String user_name;        @Column(name="age")    private Integer age;        @Column(name="nice_name",length=32)    private String nice_name;        //属性实现......}

 

UserDAO.javar,表user的一些操作,其中属性sessionFactory应该由Spring注入,如下:

package com.lei.demo.dao;import java.util.List;import javax.annotation.Resource;import org.hibernate.Query;import org.hibernate.Session;import org.hibernate.SessionFactory;import org.springframework.stereotype.Repository;import com.lei.demo.entity.Users;public class UsersDAO {    private SessionFactory sessionFactory;    public void setSessionFactory(SessionFactory sessionFactory) {        this.sessionFactory = sessionFactory;    }    public SessionFactory getSessionFactory() {        return sessionFactory;    }    public List
getAllUser(){ String hsql="from users"; Session session = sessionFactory.getCurrentSession(); Query query = session.createQuery(hsql); return query.list(); }}

 

UserService.java,业务实现类,如下

package com.lei.demo.service;import javax.annotation.Resource;import org.springframework.stereotype.Service;import org.springframework.transaction.annotation.Isolation;import org.springframework.transaction.annotation.Propagation;import org.springframework.transaction.annotation.Transactional;import com.lei.demo.dao.*;public class UserService {    private UsersDAO userDao;        public int userCount(){        return userDao.getAllUser().size();    }    public UsersDAO getUserDao() {        return userDao;    }    public void setUserDao(UsersDAO userDao) {        this.userDao = userDao;    }}

 

首先看一下xml配置,spring-hibernate.xml如下:

com.lei.demo.entity
${hibernate.hbm2ddl.auto}
${hibernate.dialect}
${hibernate.show_sql}

 

其中主要配置中是tx:advice和aop:config两个配置节,以Spring AOP的方式实现事务管理。

tx:advice配置了事务的管理者是transactionManager,同时tx:method也规定了如果方法名匹配“add*”和“get*”方法时使用事务,propagation是设定事务的传播级别。除了“add*”和“get*”方法,其他的方法的事务是只读的(典型地,对于只执行查询的事务你会将该属性设为true,如果出现了更新、插入或是删除语句时只读事务就会失败)

aop:config指定了一个aop:pointcut去引用上边的advice。

这样就通过AOP的拦截机制实现了事务,当然你还要用Spring的方式自己配置UserDAO和UserService。

 

二、      Annotation方式

第一步,首先看一下web.xml,如下:

Archetype Created Web Application
contextConfigLocation
classpath:/spring-*.xml
org.springframework.web.context.ContextLoaderListener
lei-dispatcher
org.springframework.web.servlet.DispatcherServlet
contextConfigLocation
classpath:/lei-dispatcher-servlet.xml
1
lei-dispatcher
/

 

第二步,spring-hibernate配置,见以下spring-hibernate.xml配置

com.lei.demo.entity
${hibernate.hbm2ddl.auto}
${hibernate.dialect}
${hibernate.show_sql}

第一节中xml配置事务中需要通过配置tx:advice和aop:config来增加事务的功能。此处采用全注释方法,这两个配置节就不需要了。

 

相应的需要在视图解析配置中启用注释,如下lei-dispatcher-servlet.xml

/WEB-INF/user/
.jsp

 

UserDAO如下

package com.lei.demo.dao;import java.util.List;import javax.annotation.Resource;import org.hibernate.Query;import org.hibernate.Session;import org.hibernate.SessionFactory;import org.springframework.stereotype.Repository;import com.lei.demo.entity.Users;@Repositorypublic class UsersDAO {    @Resource(name="sessionFactory")    private SessionFactory sessionFactory;    public void setSessionFactory(SessionFactory sessionFactory) {        this.sessionFactory = sessionFactory;    }    public SessionFactory getSessionFactory() {        return sessionFactory;    }    public List
getAllUser(){ String hsql="from users"; Session session = sessionFactory.getCurrentSession(); Query query = session.createQuery(hsql); return query.list(); }}

 

UserService.java如下

package com.lei.demo.service;import javax.annotation.Resource;import org.springframework.stereotype.Service;import org.springframework.transaction.annotation.Isolation;import org.springframework.transaction.annotation.Propagation;import org.springframework.transaction.annotation.Transactional;import com.lei.demo.dao.*;@Service("userService")public class UserService {    @Resource    private UsersDAO userDao;        @Transactional    public int userCount(){        return userDao.getAllUser().size();    }    public UsersDAO getUserDao() {        return userDao;    }    public void setUserDao(UsersDAO userDao) {        this.userDao = userDao;    }}

这里,方法名userCount上加入@Transactional,说明这个方法要启用事务。如果类名UserService上加入@Transactional,则表明这个类中的所有方法都会启用事务。

如果配有多个transactionManager,例如配置有transactionManager1,和transactionManager2,则可以通过@Transactional(“transactionManager1”),的方式指定使用哪个数据源的事务。

 

源代码下载:

 

 

友情赞助

 

如果您喜欢此文,感觉对您工作有帮助,预期领导会给您涨工资,不妨小额赞助一下,让我有动力继续努力。

 

赞助方式1:打开支付宝App,使用“扫一扫”付款,付款码见下图,别忘了付款留言哦!

 

 

赞助方式2:支付宝扫一下,领取我的的大红包,并花掉,双方受益

 

 赞助方式3: 如果您有微信钱包,请打开微信,使用“扫一扫”付款,付款码见下图

 

 

 

 

转载请注明出处!

 

转载于:https://www.cnblogs.com/leiOOlei/p/3725911.html

你可能感兴趣的文章
Linux环境变量永久设置方法(zsh)
查看>>
MVC4.0 利用IActionFilter实现简单的后台操作日志功能
查看>>
脑袋卡在窗子里
查看>>
ruby 中文字符to_json后乱码(unicode)
查看>>
《大道至简》第六章读后感
查看>>
codeforce 597C-Subsequences(dp+树状数组)
查看>>
[android](学习笔记6)为应用程序添加对话框(1)
查看>>
windows下mongodb安装与使用
查看>>
rotate the clock
查看>>
bugku 变量
查看>>
Python 环境傻瓜式搭建 :Anaconda概述
查看>>
趁热打铁第一季《移动APP开发使用什么样的原型设计工具比较合适?》
查看>>
debian6之eclipse和jdk安装
查看>>
数据库01 /Mysql初识以及基本命令操作
查看>>
Python并发编程03/僵尸孤儿进程,互斥锁,进程之间的通信
查看>>
数据库02 /MySQL基础数据类型以及多表之间建立联系
查看>>
Python并发编程04/多线程
查看>>
前端03 /css简绍/css选择器
查看>>
Python并发编程06 /同步/异步调用/异步调用+回调函数
查看>>
前端06 /JavaScript之BOM、DOM
查看>>