java技术--pringboot整合mybatis基于xml的来实现并开启声明式事务(09)

1.springboot开启事务,只需要一个注解@Transactional 就可以了

(1)因为在springboot中已经默认对jpa、jdbc、mybatis开启了事事务
(2)引入它们依赖的时候,事物就默认开启
(3)如果需要用其他的orm,比如beatlsql,就需要手动配置相关的事物管理器

2.环境依赖

(1)在pom文件中引入mybatis启动依赖
     <dependency>
	   <groupId>org.mybatis.spring.boot</groupId>
	   <artifactId>mybatis-spring-boot-starter</artifactId>
	   <version>1.3.0</version>
    </dependency>
(2)引入mysql 依赖和数据库连接池
    <dependency>
	   <groupId>mysql</groupId>
	   <artifactId>mysql-connector-java</artifactId>
	   <scope>runtime</scope>
	</dependency>
	<dependency>
	   <groupId>com.alibaba</groupId>
	   <artifactId>druid</artifactId>
	   <version>1.0.29</version>
	</dependency>

3.创建配置文件application.properties

(1)配置数据源
    spring.datasource.url=jdbc:mysql://localhost:3306/test
    spring.datasource.username=root
    spring.datasource.password=123456
    spring.datasource.driver-class-name=com.mysql.jdbc.Driver
    mybatis.mapper-locations=classpath*:mybatis/*Mapper.xml
    mybatis.type-aliases-package=com.user.entity
    <1>mybatis.mapper-locations来指明mapper的xml文件存放位置
    <2>上面存放位置是放在resources/mybatis文件下的 
    <3>mybatis.type-aliases-package来指明和数据库映射的实体的所在包
(2)经过以上步骤,springboot就可以通过mybatis访问数据库来    

4.创建数据库表(略,自行创建)
5.具体实现:通过xml的形式实现

1)创建实体:
public class Account {
    private int id ;
    private String name ;
    private double money;
    getter../setter.. }2)数据访问Dao层
  public interface AccountMapper {
   int update( @Param("money") double money, @Param("id") int  id);}3)Mapper:接口实现
   <?xml version="1.0" encoding="UTF-8"?>
   <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
   <mapper namespace="com.user.dao.AccountMapper">
    <update id="update">
        UPDATE account set money=#{money} WHERE id=#{id}
    </update></mapper>4)Service层
      @Service
      public class AccountService {
        @Autowired
        AccountMapper accountMapper;
        @Transactional//@Transactional注解开启声明式事务
        public void transfer() throws RuntimeException{
          accountMapper2.update(90,1);//用户1减10块 用户2加10块
          int i=1/0;accountMapper2.update(110,2);}}

6.@Transactional放在类级别和方法级别的区别

(1)@Transactional放在类级别上等同于该类的每个方法都放上了@Transactional
(2)方法的@Transactional会覆盖类上面声明的事务
(3)代码示例如下:
     //默认将类中的所有函数纳入事务管理.
     @Transactional(readOnly=true) //配置事务 查询使用只读
     public Demo{
       //方法的写法 (增删改要写 ReadOnly=false 为可写) 
       @Transactiona(propagation=Propagation.REQUIRED,        
                     isolation=Isolation.DEFAULT,
                     readOnly=false)
             public void saveUser(){}}
      <1>Propagation.REQUIRED :有事务就处于当前事务中,没事务就创建一个事务
      <2>isolation=Isolation.DEFAULT:事务数据库的默认隔离级别
      <3>readOnly=false:可写 针对 增删改操作       
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值