spring boot配置mybatis和事务管理

一、spring boot与mybatis的配置

1.首先,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引入不同的依赖,千万不要忘记。如果忘记引入,会报找不到驱动类异常。

2.然后,在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文件放置的位置。

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

对于上图的解释如下:

  1. 启动类必须放在项目中相对其他类的最高处,前边文章说过,spring boot没有传统的spring 项目配置的`` 标签,它扫描bean的方式就是从启动类依次向下扫描进默认的内置tomcat容器的。
  2. 上图service放置的位置比其实现类放置的位置高,如果有两个service A和B,实现类里有Aimpl和Bimpl,如果有Aimpl调用B的情况,有可能会在启动容器报“a field named ‘B’ not found”貌似这种错误,说明容器扫描顺序有误。
  3. 这种情况的最好的解决办法,就应该像我将service放在高处,容器启动先扫描进service,然后再扫描impl,这样在实现类扫描的时候就肯定能找到service,也就不会出现这种错误了。
  4. 另一种解决办法是在引入service时多添加一个注解:@Lazy
    @Autowired@Lazy //这样就会延迟加载,上图不需要,这里只是解释这注解LogsUserActiveMapper logsUserActiveMapper;
  5. 总之,如果出现调用与被调用关系,一定要记得,被调用者要首先被扫描进spring boot内置容器,也就是被调用者的包位置要放的较高一些(位置至少也待相平)。

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

5.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的值

<mapper namespace="cloud.kafka.mapper.LogsUserActiveMapper" >

这样就完成mybatis的配置了。

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

1、需要的注解为@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>

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

2.首先,找到你的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注解使用

3.配置完后,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);}
}

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

说一下上边的@EnableTransactionManagement是不是必加的



下一篇写spring boot + druid配置。

spring boot配置mybatis和事务管理相关推荐

  1. Spring Boot中的多事务管理

    ** 一.多数据源问题 ** 最后一个可以插入一条数据,原因是Transactoinal的事务只针对userMapper有效,因为之前的事务只给test1配置了,而test2并没有配置事务. ** 二 ...

  2. Spring boot 加Mybatis加dubble多数据源配置

    Spring boot 整合Mybatis+dubble +maven单数据源的例子很多,但是多数据源配置需要将原本封装好的重写一遍,有点麻烦,对框架的理解要求比较高, 在这详细给大家介绍下如何配置使 ...

  3. spring boot集成mybatis+事务控制

    一下代码为DEMO演示,采用注解的方式完成Spring boot和Mybatis的集成,并进行事物的控制 数据源的配置: 1 spring.datasource.url=jdbc:mysql://lo ...

  4. spring boot、mybatis集成druid数据库连接池,实现mysql cluster HA负载均衡访问

    spring boot.mybatis集成druid数据库连接池,实现mysql cluster HA负载均衡访问 1.原理实现介绍 本质来说使用连接池是为了节省创建.关闭数据库连接的资源消耗,从而提 ...

  5. Spring Boot 整合 MyBatis Plus实现多数据源的两种方式

    第一种:使用配置类的方式: 项目结构 xml依赖: <?xml version="1.0" encoding="UTF-8"?> <proje ...

  6. Spring Boot + Security + MyBatis + Thymeleaf + Activiti 快速开发平台项目

    项目介绍 Spring Boot + Security + MyBatis + Thymeleaf + Activiti 快速开发平台 基于 Layui 的后台管理系统模板,扩展 Layui 原生 U ...

  7. Spring JDBC-混合框架的事务管理

    概述 问题 解决方案 示例Hibernate Spring JDBC 概述 Spring 抽象的 DAO 体系兼容多种数据访问技术,它们各有特色,各有千秋. Hibernate 是非常优秀的 ORM ...

  8. Spring Boot与MyBatis整合

    2019独角兽企业重金招聘Python工程师标准>>> 数据库以MySQL为例 IDE:spring tool suite 1. 新建项目 file -> new -> ...

  9. spring boot整合mybatis+通用mapper+pagehelper分页插件

    spring boot整合mybatis+通用mapper+pagehelper分页插件 pom依赖 <?xml version="1.0" encoding="U ...

最新文章

  1. java ee会员功能项目_基于jsp的会员系统-JavaEE实现会员系统 - java项目源码
  2. Android组件之BroadCast简单实践
  3. 【Linux】一步一步学Linux——yes命令(248)
  4. linux c 之使用-O来优化gcc
  5. 初一模拟赛总结(2019.5.25)
  6. Exynos4412 内核移植(六)—— 设备树解析
  7. c语言把字符串写入文件,c语言文件读写 | 按字符,按行,按块
  8. 从零开始:什么是Makefile分析
  9. 10.N个整数中查找是否相加为K[深度搜索]
  10. 设计模式之——桥接模式
  11. mysql的r2dbc_使用R2DBC实现数据库的响应式访问
  12. 软件安全性验收测试 软件测试常见报告类型
  13. 神经网络模型怎么建立,如何选择神经网络模型
  14. 10年软件测试工程师 常用八大测试用例设计方法
  15. 福禄克FLUKE 9142/9143/9144/9170/9771/9173-A-P-256计量干井炉技术指标
  16. 怎么用dw做html网页模板,使用Dreamweaver制作网页的20个技巧
  17. JDBC bug : You must configure either the server or JDBC driver
  18. 表带式无线测温传感器图片(开关柜测温装置传感器)
  19. 学习AngularJS摘抄的笔记,方便以后查看(摘自菜鸟教程)
  20. 中国自动转换开关控制器行业市场供需与战略研究报告

热门文章

  1. Java扫描仪toString()方法及示例
  2. kotlin键值对数组_Kotlin程序检查数组是否包含给定值
  3. ++代码实现 模糊综合算法_干货 | 十大经典排序算法最强总结(内含代码实现)...
  4. mysql 视图 字典_MySQL深入01-SQL语言-数据字典-服务器变量-数据操作DML-视图
  5. lvs负载均衡—NAT模式
  6. java jar包示例_Java包getSpecificationVersion()方法和示例
  7. 厉害了,Spring中bean的12种定义方法!
  8. 【逆强化学习-0】Introduction
  9. innerHTML、innerText和outerHTML、outerText的区别
  10. oracle11g arm,想知道ARM11架构?这篇介绍告诉你