SpringMvc整合Mybatis并使用声明式事务
(1)、引入相关依赖
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.12</version>
</dependency> <dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.13</version>
</dependency> <dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-orm</artifactId>
<version>4.3.22.RELEASE</version>
</dependency> <dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>2.0.0</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.0</version>
</dependency>
(2)、编写Mybatis配置类
package cn.coreqi.config; import com.alibaba.druid.pool.DruidDataSource;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
import org.springframework.transaction.annotation.EnableTransactionManagement; import javax.sql.DataSource; @EnableTransactionManagement //启动事务管理器
@Configuration
@MapperScan(value = "cn.coreqi.mapper") //扫描Mapper文件
public class MybatisConfig {
@Bean
public DataSource dataSource(){
DruidDataSource ds = new DruidDataSource();
ds.setDriverClassName("com.mysql.jdbc.Driver");
ds.setUrl("jdbc:mysql://localhost:3306/mybatisdemo?serverTimezone=UTC");
ds.setUsername("root");
ds.setPassword("123456");
return ds;
} //注册Mybatis SqlSessionFactory
@Bean
public SqlSessionFactoryBean sqlSessionFactory(DataSource dataSource){
SqlSessionFactoryBean sqlSessionFactory = new SqlSessionFactoryBean();
sqlSessionFactory.setDataSource(dataSource);
return sqlSessionFactory;
} //注册事务管理器
@Bean
public DataSourceTransactionManager transactionManager(DataSource dataSource){
DataSourceTransactionManager transactionManager = new DataSourceTransactionManager();
transactionManager.setDataSource(dataSource);
return transactionManager;
}
}
(3)、编写Mapper文件
package cn.coreqi.mapper; import cn.coreqi.entities.User;
import org.apache.ibatis.annotations.*; @Mapper
public interface UserMapper{
@Select("select * from users where Id = #{id}")
public User getUserById(Integer id);
@Insert("insert into users(UserName,PassWord,Enabled) values(#{UserName},#{PassWord},#{Enabled})")
@Options(useGeneratedKeys = true,keyProperty = "Id")
public int addUser(User user);
@Update("update users set UserName = #{UserName},PassWord = #{PassWord},Enabled = #{Enabled} where Id = #{Id}")
public int modifyUser(User user);
@Delete("delete from users where Id = #{id}")
public void delById(Integer id);
}
(4)、编写Service文件
package cn.coreqi.service; import cn.coreqi.entities.User;
import cn.coreqi.mapper.UserMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Isolation;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional; import java.io.IOException;
import java.sql.SQLException; @Service
public class UserService {
@Autowired
private UserMapper userMapper; @Transactional(readOnly = true)
public User getUserById(Integer id){
return userMapper.getUserById(id);
} @Transactional
public User insertUser(User user){
userMapper.addUser(user);
return user;
} //@Transactional属性
// 1.propagation 指定当前事务的传播行为,共7种,常用的有REQUIRES_NEW和REQUIRED
// 2.isolation 指定当前事务的隔离级别,共5种,常用的有READ_COMMITTED,*事务的隔离级别要得到底层数据库的支持,而不是应用程序和框架的支持
// 3.rollbackFor&noRollbackFor 指定当前事务的回滚属性,rollbackFor指定遇到那些异常进行回滚,noRollbackFor指定遇到那些异常不进行回滚。*如果不指定这两个属性的默认情况下
// Spring的声明式事务对所有的运行时异常(RuntimeException)和Error类型的异常进行回滚。
// 4.readOnly 指定当前事务是否只读,true表示这个事务只读取数据而不对数据做修改,这样可以帮助数据库引擎优化事务
// 5.timeout 指定当前事务可以保持多久,防止长期运行事务占用资源,单位秒。
@Transactional(propagation = Propagation.REQUIRES_NEW,isolation = Isolation.READ_COMMITTED,
rollbackFor = {IOException.class, SQLException.class},noRollbackFor = {ArithmeticException.class},
readOnly = false,timeout = 30)
public User modifyUser(User user){
userMapper.modifyUser(user);
return user;
} @Transactional
public void delById(Integer id){
userMapper.delById(id); }
}
SpringMvc整合Mybatis并使用声明式事务的更多相关文章
- spring mvc + mybatis + spring aop声明式事务管理没有作用
在最近的一个项目中,采用springMVC.mybatis,发现一个很恼人的问题:事务管理不起作用!!网上查阅了大量的资料,尝试了各种解决办法,亦未能解决问题! spring版本:3.0.5 myba ...
- SpringMVC+Spring+Mybatis整合,使用druid连接池,声明式事务,maven配置
一直对springmvc和mybatis挺怀念的,最近想自己再搭建下框架,然后写点什么. 暂时没有整合缓存,druid也没有做ip地址的过滤.Spring的AOP简单配置了下,也还没具体弄,不知道能不 ...
- springmvc mybatis 声明式事务管理回滚失效,(checked回滚)捕捉异常,传输错误信息
一.知识点及问题 后端框架: Spring .Spring mvc .mybatis 业务需求: client先从服务端获取用户大量信息到client,编辑完毕之后统一Post至服务端,对于数据的改动 ...
- spring整合mybatis,ioc容器及声明式事务配置
步骤: 1.创建jdbc.properties文件,用来管理存放连接数据库的相关信息 jdbc.properties:jdbc.user=root jdbc.password=123456 jdbc. ...
- 零基础学习java------39---------json格式交互,Restful(不懂),静态资源映射,SSM整合(ssm整合思想,application.xml文件详解(声明式事务管理),)
一. json格式交互(知道) 1 . 回顾ajax基本语法 $.ajax({ url:"", // 请求的后台路径 data:{"":"" ...
- Spring第13篇—–Spring整合Hibernate之声明式事务管理
不容置疑的我们可以知道Spring的事务管理是通过AOP(AOP把我们的事务管理织入到我们的业务逻辑里面了)的方式来实现的,因为事务方面的代码与spring的绑定并以一种样板式结构使用.(面向切面编程 ...
- spring+springMVC,声明式事务失效,原因以及解决办法
http://blog.csdn.net/z69183787/article/details/37819627#comments 一.声明式事务配置: <bean id="transa ...
- Spring 16: SM(Spring + MyBatis) 注解式事务 与 声明式事务
Spring事务处理方式 方式1:注解式事务 使用@Transactional注解完成事务控制,此注解可添加到类上,则对类中所有方法执行事务的设定,注解添加到方法上,则对该方法执行事务处理 @Tran ...
- 声明式事务-整合Spring、Hibernate
编程式事务:通过编码的方式,让事务处理的代码侵入到核心的业务代码中. 声明式事务:完成了事务处理的代码和业务核心代码的解耦合.提供事务处理代码的复用性和降低维护成本. 声明式事务:aop最典型的应用. ...
随机推荐
- codeforces 797B
B. Odd sum time limit per test 1 second memory limit per test 256 megabytes input standard input out ...
- itexpdf同一个段落不同文字,如何设置不同的格式
Java使用itexpdf生成PDF,正常情况下,新建一个段落Paragraph,然后可以给段落添加一个格式BaseFont Paragraph paragraphBlue = new Paragra ...
- day11 reduce函数
场景模拟: 序列元素在原有基础上加1 常规方法 简单但扩展性查 num1 = [1,2,3,4,5,6,7,8,9,100] res = 0 for i in num1: res += i print ...
- 【HDU1219】AC Me(水题)
BUPT2017 wintertraining(16) #4 A HDU1219 题意 多组样例,每组给一行,输出该行各字母个数,每组输出之间输出空行 代码 #include <cstdio&g ...
- 【POI每日题解 #5】 DWU-Double-row
题目链接 [POI2005]DWU-Double-row wwwww 之前写了半小时 一卡机 没啦QAQ 简单说一下吧 [吐血ing 这道题长得好二分图啊 所以本能地连边 一种是A边 连可交换的数对 ...
- 03 自学Aruba之2.4GHz及5GHz无线信道
点击返回:自学Aruba之路点击返回:自学Aruba集锦 03 自学Aruba之2.4GHz及5GHz无线信道 1. 2.4GHz信道 在各国家授权使用的频段: 信道号 中心频率(GHz) 美国FC ...
- [hgoi#2019/2/16t4]transform
题目描述 植物学家Dustar培养出了一棵神奇的树,这棵有根树有n个节点,每个节点上都有一个数字a[i],而且这棵树的根为r节点. 这棵树非常神奇,可以随意转换根的位置,上一秒钟它的根是x节点,下一秒 ...
- poj 2976(二分搜索+最大化平均值)
传送门:Problem 2976 参考资料: [1]:http://www.hankcs.com/program/cpp/poj-2976-dropping-tests-problem-solutio ...
- 下拉列表JComboBox,列表框JList
1.下拉列表JComboBox public class Demo extends JFrame { public Demo() { setBounds(100, 100, 200, 100); se ...
- 解决IIS8中 URLRewriter 不能使用的方法
1.把应用程序池改成集成 2.的web.config 加入代码 <system.webServer> <validation validateIntegratedModeConfig ...