快捷搜索:  汽车  科技

spring boot 集成mybatis如何配置:Springboot配置Mybatis的事务管理

spring boot 集成mybatis如何配置:Springboot配置Mybatis的事务管理对于上图的解释如下:我是mybatis通过数据库表逆向工程生成的实体类、mapper等,先把项目具体的放置结构贴出来如下:springboot默认会把spring.datasource开头的信息收纳,进行DataSource对象的配置,进而进行sqlSessionFactory的配置等相关数据库连接的配置,所以其他很多人会说写什么配置类,那些我感觉没有必要的。(配置druid需要配一个 Bean,下一篇会说到)当然如果是特别详细的,而在application.properties文件里又通过spring.datasource点不出相关的配置,那可能需要配置类什么的。mybatis.mapper-locations所指向的位置是从src/main/resource开始的,前边需要加上classpath,它指向的是你的mapper.xml文件放置的位置。

Springboot配置mybatis和事务管理1、springboot与mybatis的配置

首先 spring boot配置mybatis需要的全部依赖如下:

<!-- Spring Boot 启动父依赖 --> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>1.5.1.RELEASE</version> </parent> <!--以上内容放在dependencies标签外,如果你有已经有父标签,那将以上部分粘贴到父项目中--> <!-- spring boot 项目启动必须引入的web依赖 以下内容放在dependency即可 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> <version>1.5.1.RELEASE</version> </dependency> <!-- Spring Boot Mybatis 依赖 --> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>1.2.0</version> </dependency> <!-- oracle的数据库驱动包 --> <dependency> <groupId>com.oracle</groupId> <artifactId>ojdbc6</artifactId> <version>11.2.0.4.0-atlassian-hosted</version> </dependency>

这里主要说一下上边的数据库驱动包,oracle和mysql引入不同的依赖,千万不要忘记。如果忘记引入,会报找不到驱动类异常。

然后,在application.properties配置文件里添加如下内容:

##数据库连接信息 spring.datasource.url=jdbc:oracle:thin:@//192.168.1.171:1521/orcl spring.datasource.username=znxd spring.datasource.password=znxd spring.datasource.driver-class-name=oracle.jdbc.driver.OracleDriver ##指向mapper的xml文件位置 mybatis.mapper-locations=classpath:mapper/*Mapper.xml ##指向实体类的位置 mybatis.type-aliases-package=cloud.user.models.*

上边以spring.datasource开头的内容其实有很多,具体,在application.properties文件里输入后看看能点出的内容就知道了。

springboot默认会把spring.datasource开头的信息收纳,进行DataSource对象的配置,进而进行sqlSessionFactory的配置等相关数据库连接的配置,所以其他很多人会说写什么配置类,那些我感觉没有必要的。(配置druid需要配一个 Bean,下一篇会说到)

当然如果是特别详细的,而在application.properties文件里又通过spring.datasource点不出相关的配置,那可能需要配置类什么的。

mybatis.mapper-locations所指向的位置是从src/main/resource开始的,前边需要加上classpath,它指向的是你的mapper.xml文件放置的位置。

我是mybatis通过数据库表逆向工程生成的实体类、mapper等,先把项目具体的放置结构贴出来如下:

spring boot 集成mybatis如何配置:Springboot配置Mybatis的事务管理(1)

对于上图的解释如下:

启动类必须放在项目中相对其他类的最高处,前边文章说过,spring boot没有传统的spring项目配置的<bean>标签,它扫描bean的方式就是从启动类依次向下扫描进默认的内置tomcat容器的。

上图service放置的位置比其实现类放置的位置高,如果有两个service A和B,实现类里有Aimpl和Bimpl,如果有Aimpl调用B的情况,有可能会在启动容器报“a field named‘B’not found”貌似这种错误,说明容器扫描顺序有误。

这种情况的最好的解决办法,就应该像我将service放在高处,容器启动先扫描进service,然后再扫描impl 这样在实现类扫描的时候就肯定能找到service,也就不会出现这种错误了。

另一种解决办法是在引入service时多添加一个注解: Lazy

Autowired

Lazy//这样就会延迟加载,上图不需要,这里只是解释这注解

LogsUserActiveMapper logsUserActiveMapper;

总之,如果出现调用与被调用关系,一定要记得,被调用者要首先被扫描进spring boot内置容器,也就是被调用者的包位置要放的较高一些(位置至少也待相平)。

service实现类上需要加一个 Service注解。这个可能不需要,我一直没有试试。

spring boot mybatis除了这些要求,还需要在启动类处添加一个注解 MapperScan,如下:

package cloud.kafka; import org.mybatis.spring.annotation.MapperScan; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.transaction.annotation.EnableTransactionManagement; @SpringBootApplication @EnableTransactionManagement //如果mybatis中service实现类中加入事务注解,需要此处添加该注解 @MapperScan("cloud.kafka.mapper") //扫描的是mapper.xml中namespace指向值的包位置 public class KafkaLogApplication { public static void main(String[] args){ SpringApplication.run(KafkaLogApplication.class args); } }

如下是我的mapper.xml里namespace的值

这样就完成mybatis的配置了。

2、事务的配置,就是在mybatis的基础上加上两个注解。

需要的注解为 EnableTransactionManagement和 Transactional两个,它们来自于下边这个包:

spring-tx.jar

该包其实在前边配置mybatis引入依赖时,已自动引入,就是下边这个:

<!-- Spring Boot Mybatis 依赖 --> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>1.2.0</version> </dependency>

所以只要上边的依赖引入进来,那事务就不需要再引入包了,

首先,找到你的service实现类,加上 Transactional注解,如果你加在类上,那该类所有的方法都会被事务管理,如果你加在方法上,那仅仅该方法符合具体的事务。当然我们一般都是加在方法上。因为只有增、删、改才会需要事务。

比如下边的一个插入数据的方法添加事务:

@Override @Transactional(propagation = Propagation.REQUIRED isolation = Isolation.DEFAULT timeout=36000 rollbackFor=Exception.class) public Integer add(Cbf_jtcy t) { return cbf_jtcyMapper.insert(t); }

如果不知道里边都是什么东西,可以查看这篇文章,spring mybatis事务管理配置与 Transactional注解使用

配置完后,spring boot启动类必须要开启事务,而开启事务用的注解就是 EnableTransactionManagement 如下:

@SpringBootApplication @EnableTransactionManagement @MapperScan("microservice.qssj.mapper")//必须加这个,不加报错,如果不加,也可以在每个mapper上添加@Mapper注释,并且这里还要多填一个注释,那个我忘了,我一直用这个注解 public class QssjServiceApplication { public static void main(String[] args) { SpringApplication.run(QssjServiceApplication.class args); } }

这样就完成了事务的配置。

动力节点的 SpringBoot入门教程由浅入深,手把手带你学习Spring Boot,体验Spring Boot的极速开发过程,内容丰富,涵盖了SpringBoot开发的方方面面,并且同步更新到Spring 2.x版本。

老师讲课风趣幽默印象深刻,便于大家对知识点记忆,老师讲课中有很多小窍门,注重实际代码练习,学习理论与实践相结合,然后再深入学习一套实战项目,将会令你学习更快,积累更多项目实战经验。

动力节点SpringBoot深入浅出教程

https://www.bilibili.com/video/BV1pK411G7aw

SpringBoot教程资料下载方式

http://www.bjpowernode.com/?toutiao

猜您喜欢: