Spring&Mybatis集成事务

以此记录加深印象

目录

导包和一些前置工作

前期工作 有数据库表和 基础类的配置

配置相关文件

测试


Spring的所有集成必不可少的就是导包。

导包和一些前置工作


    
      org.springframework
      spring-aop
      5.0.5.RELEASE
    

    
      cglib
      cglib
      3.3.0
    
    
      org.aspectj
      aspectjweaver
      1.8.13
    

    
      org.springframework
      spring-context
      5.0.5.RELEASE
    



    
      org.springframework
      spring-jdbc
      5.0.5.RELEASE
    

    
      mysql
      mysql-connector-java
      8.0.28
    


    
      org.mybatis
      mybatis
      3.5.1
    

    
      org.mybatis
      mybatis-spring
      2.0.1
    

    
      org.springframework
      spring-tx
      5.0.5.RELEASE
    



    
      junit
      junit
      4.12
      test
    

    
      com.alibaba
      druid
      1.2.8
    


    
      org.projectlombok
      lombok
      1.18.4
    

前期工作 有数据库表和 基础类的配置

数据据库表 有自增id name age ,sex 四个字段

Spring&Mybatis集成事务_第1张图片

首先看一下项目的目录

Spring&Mybatis集成事务_第2张图片

pojo实体类:

package com.pojo;

import lombok.Data;
import org.springframework.stereotype.Component;

/**
 * 用户
 *
 * @author 幕自由人
 * @date 2022/04/09
 */
@Component
@Data//利用lombok的包自动生成get,set方法
public class User {
    private int id;
    private String name;
    private int age;
    private int sex;
}

mapper接口(也就是dao层)

@Mapper
public interface UserMapper {
    /**
     * 查询所有
     *
     *
     * @return {@link List}<{@link User}>
     */
    List queryAll();

    /**
     * 保存用户
     *
     * @param user 用户
     * @return int
     */
    int saveUser(User user);

    /**
     * 删除用户
     *
     * @param id id
     * @return int
     */
    int deleteUser(int  id);
}

业务层:

public class UserServerImpl implements UserService {
    /**
     * 查询所有
     *
     * @return {@link List}<{@link User}>
     */
    @Autowired
    private UserMapper mapper;

    @Override
    public List queryAll() {
        return mapper.queryAll();
    }

    /**
     * 保存所有
     *
     * @param user 用户
     * @return int
     */
    @Override
    public int saveAll(User user) {

            int a=1/0;
        return mapper.saveUser(user);
    }


//重点,重点,重点

    /**
     * 测试事务是否能够执行成功
     *
     * @param user 用户
     * @return int
     */
//该方法就用于测试事务是否成功!!
public void test(User user,int id){
    mapper.deleteUser(id);
    int a=1/0;
    mapper.saveUser(user);

}





    /**
     * 删除用户
     *
     * @param id id
     * @return int
     */
    @Override
    public int deleteUser(int id) {
        return 0;
    }

控制层

@Controller
public class UserController {

    public static void main(String[] args) {
        ApplicationContext app = new ClassPathXmlApplicationContext("applicationContext.xml");
        UserServerImpl accountService = (UserServerImpl) app.getBean("server");
        User user=new User();
        user.setSex(2);
        user.setAge(2);
        user.setName("2");
//执行该方法测试事务是否配置成功
        accountService.test(user,6);

        System.out.println(user.getId());
    }
}

配置相关文件

  • jdbc.properties
jdbc.driver=com.mysql.cj.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/test?serverTimezone=UTC
jdbc.username=root
jdbc.password=123456

连接数据库的参数 8.+的版本注意驱动要+cj. 以及时区参数 不然有时会报错的。

  • mybatis-config.xml(里面的大部分东西都可以去掉)

这里面可以配置类的别名,也可以在识别不了映射文件时,通过标签配置映射文件地址

在这里我把它给注释掉了 我将会在applicationContext.xml文件里进行配置mapper文件的路径地址




    

    

我的文件在resources的路径如下

Spring&Mybatis集成事务_第3张图片

  • applicationContext.xml

配置applicationContext.xml文件时,就得细说一下了

第一步引入 properties文件 方便后面连接数据库

<-- 引入jdbc的配置文件-->
    
<-- 扫包-->
    

第二步 配置数据源对象。我这里用的是阿里的数据源包



    
    
    
    

第三步 把spring 和mybatis集成起来


    
        
        
        
            

                classpath:mappers/UserMapper.xml
            
        
    


   
       
   

 第四步 配置事务管理系统


    
    
    

第五步:配置事务声明与切面:

这个就是最重点的了

首先解释一下

 

isolation, propagation, timeout,read-only

 isolation:事务的隔离级别  propogation:事务的传播行为  timeout:超时时间  read-only:是否只读

最后就是配置切面了 没有什么好说的 我之前也写了 aop的代理笔记的可以去我之前的文章看一下

 
        
            
        
    
    
        
    

完整的applicationContext.xml如下,如果不知道怎么配置 快速配置文件头则可以看我前面的spring 的笔记



    
    

    
    
    


    
    
    
    


    
        
        
        
            

                classpath:mappers/UserMapper.xml
            
        
    


   
       
   
    
        
            
        
    
    
        
    

在配置applicationContext.xml的时候有个坑就是:

如果你需利用注解实现业务层的实现类注解注入时,你就需要导入cglib的坐标,才行应为jdk动态代理是不支持注解类注入的。只支持接口注入否则就需要改成 业务层的接口注入

  • Usermapper.xml

与接口的几个方法对应就行





    
insert into `user` (`name`,age,sex)values (#{name},#{age},#{sex})
    
    
        delete from `user` where id=#{id}
    
    

配置文件配置好过后,就能进行简单的测试了

测试

首先把 错误打开 

Spring&Mybatis集成事务_第4张图片

Spring&Mybatis集成事务_第5张图片

 进行测试,如果没有配置事务的化。应该会执行删除用户id为2的操作,然后报错 ,

进行事务配置后,则会不执行删除用户操作直接报错

结果如下:

数据库表:

Spring&Mybatis集成事务_第6张图片

id为2还存在。

最后注掉 int a=1/0;后会执行删除id为2 且增加user

结果如下:

id 为二已删除 增加了 2 . 2. 2的用户信息

Spring&Mybatis集成事务_第7张图片

 一个简单的事务管理就配置好了

你可能感兴趣的:(java,maven,spring)