养生 装修 购物 美食 感冒 便秘 营销 加盟 小吃 火锅 管理 创业 搭配 减肥 培训 旅游

SpringBoot整合Mybatis中如何实现事务控制

时间:2024-10-08 04:24:06

SpringBoot整合Mybatis中如何实现事务控制

工具/原料

springboot

intellijidea

方法/步骤

1、在Spring之中提供的事务控制里面有以下的几种事务级别。

SpringBoot整合Mybatis中如何实现事务控制

2、如果现在要想在springboot里面去启用mybatis事务,那么就可以通过如下的方式来解决。修改IDeptDAO接口,追加一个只读事务控制:packagecom.gwolf.service;importcom.gwolf.vo.Dept;importorg.springframework.transaction.annotation.Transactional;importjava.util.List;publicinterfaceIDeptService{@Transactional(readOnly=true)publicList<Dept>getAll();}

SpringBoot整合Mybatis中如何实现事务控制

3、此时配置了一个只读的事务操作,那么也就是说在这个业务方法只能够采用读的模式苴煜塑桠来进行操作。但是现在你配置了一个注解并不表示当前已经合理的支持了事棣蚺幌盗务,如果要进行事务的启用,还需要在程序的启动类上增加一个新的注解配置:packagecom.gwolf;importorg.springframework.boot.SpringApplication;importorg.springframework.boot.autoconfigure.SpringBootApplication;importorg.springframework.boot.context.embedded.EmbeddedServletContainer;importorg.springframework.transaction.annotation.EnableTransactionManagement;@SpringBootApplication//启动SpringBoot程序,而后自带子包扫描。@EnableTransactionManagementpublicclassStartSpringBootMain{publicstaticvoidmain(String[]args){SpringApplication.run(StartSpringBootMain.class,args);}}

SpringBoot整合Mybatis中如何实现事务控制

4、如果现在要想更好的观察到事务的问题,最简单的做法是编写一个数据增加操作,而后为这个业务方法设置只读配置。修改IDeptDAO接口追加一个新的方法:packagecom.gwolf.dao;importcom.gwolf.vo.Dept;importorg.apache.ibatis.annotations.Mapper;importorg.springframework.transaction.annotation.Transactional;importjava.util.List;@MapperpublicinterfaceIDeptDAO{publicList<Dept>findAll();publicbooleandoCreate(Deptvo);}

SpringBoot整合Mybatis中如何实现事务控制

5、修改Dept.xml配置文件,淠茏唪磁追加一个方法的实现的SQL语句。<?xmlversion="1.0"encoding="UTF-8"?>稆糨孝汶;<!DOCTYPEmapperPUBLIC"-//mybatis.org//DTDMapper3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd"><mappernamespace="com.gwolf.dao.IDeptDAO"><selectid="findAll"resultType="Dept">SELECTdeptno,dname,locFROMdept;</select><insertid="doCreate"parameterType="Dept">insertintodept(dname)values(#{dname});</insert></mapper>

SpringBoot整合Mybatis中如何实现事务控制

6、在IDeptService接口之中追加有一个业务方法:packagecom.gwolf.service;importcom.gwolf.vo.Dept;importorg.springframework.transaction.annotation.Transactional;importjava.util.List;publicinterfaceIDeptService{@Transactional(readOnly=true)publicList<Dept>getAll();@Transactional(readOnly=true)publicbooleanadd(Deptdept);}

SpringBoot整合Mybatis中如何实现事务控制

7、编写单元测试类:packagecom.gwolf.test;importc艺皱麾酪om.gwolf.StartSpringBootM锾攒揉敫ain;importcom.gwolf.service.IDeptService;importcom.gwolf.vo.Dept;importorg.junit.Test;importorg.junit.runner.RunWith;importorg.springframework.boot.test.context.SpringBootTest;importorg.springframework.test.context.junit4.SpringJUnit4ClassRunner;importorg.springframework.test.context.web.WebAppConfiguration;importjavax.annotation.Resource;importjavax.sql.DataSource;@SpringBootTest(classes=StartSpringBootMain.class)@RunWith(SpringJUnit4ClassRunner.class)@WebAppConfigurationpublicclassTestDeptService{@ResourceprivateIDeptServicedeptService;@TestpublicvoidtestList()throwsException{System.out.println(this.deptService.getAll());}@TestpublicvoidtestAdd()throwsException{Deptdept=newDept();dept.setDname("百度");dept.setDeptno(100L);System.out.println(this.deptService.add(dept));}}

SpringBoot整合Mybatis中如何实现事务控制

SpringBoot整合Mybatis中如何实现事务控制

8、如果在实际的工作之中,对于更新操作应该强制性的启动一个事物控制才对:packagecom.gwolf.service;importcom.gwolf.vo.Dept;importorg.springframework.transaction.annotation.Propagation;importorg.springframework.transaction.annotation.Transactional;importjava.util.List;publicinterfaceIDeptService{@Transactional(readOnly=true)publicList<Dept>getAll();@Transactional(propagation=Propagation.REQUIRED)publicbooleanadd(Deptdept);}

SpringBoot整合Mybatis中如何实现事务控制

9、此时应该明确的表示该操作方法应该启动一个事物的配置项。

SpringBoot整合Mybatis中如何实现事务控制

10、在使用spring+mybatis里面处理的时候应该考虑到信息的显示问题,所以此处建议使用logback日志组件来进行日志信息的配置。将logback.xml配置文件拷贝到src/main/resouces之中;在项目之中去引入logback的依赖配置文件。在正常情况下mybatis中的日志信息的输出操作必须设置其对应的命名控制,在logback.xml中追加如下信息;<loggername="com.gwolf.dao"level="trace"/>

© 一点知识