spring-boot集成mybatis真的很简单吗?
在日常的后端开发中,使用mybatis作为DAO层的持久框架已经是惯例。但很多时候都是在别人搭好的框架中进行开发,对怎么搭建环境是一知半解,今天就来实践下。
一、集成分哪些步骤
来看下集成mybatis需要哪些步骤,
1、确定环境及依赖
2、配置文件;
3、测试
二、环境及依赖
这里,基于springboot集成mybatis。先看下具体的版本,
springboot:2.3.3.RELEASE
mybatis-spring-boot-starter:2.3.0
mysql驱动:8.0.32
下面具体看下这些依赖,spring-boot自不用说,就是在这个环境下的;
mybatis-spring-boot-starter
mybatis-spring-boot-starter是针对mybatis和spring-boot集成而开发的一个依赖,里边包含了所需的依赖,方便集成,其实spring官方还有很多这样的starter,例,

可以看到官方提供了很多starter供开发者使用。怎么没看到mybatis-spring-boot-starter呐,不急,它不是官方提供的,而是mybatis官方提供的,多提一句,对于starter的命名官方也给出了这样的建议,官方提供的spring-boot-starter-*,而第三方的则是thirdpartyproject-spring-boot-starter,

详见:https://docs.spring.io/spring-boot/docs/2.3.0.RELEASE/reference/pdf/spring-boot-reference.pdf
你想创建自己的starter吗,可以在文末“推荐阅读”里找到相关的博文。
mysql驱动也不用说,要使用程序访问mysql,自然少不了mysql的驱动。
用一张图来描述下,springboot下集成mybatis的一个逻辑流程,

我们都知道,可以在程序中直接使用JDBC访问mysql,也可以使用mybatis访问mysql,在spring的环境下则通过mybatis-spring访问mysql。从图中可以看到访问路径更长了,那集成mybatis的意义是什么,答案是使用更简单,还记得刚学习的时候使用JDBC的噩梦吗?
看下,引入的依赖,我这里使用父子项目,采用在父pom中管理依赖,子pom使用的原则。
父pom.xml
<!--mybatis-spring-->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.3.0</version>
</dependency>
<!--mysql的驱动-->
<dependency>
<groupId>com.mysql</groupId>
<artifactId>mysql-connector-j</artifactId>
<version>8.0.32</version>
</dependency>
子pom.xml这里不再列出,看下最终的依赖,

可以看到mybatis-spring-boot-starter中已经包含了mybatis、mybatis-spring等依赖,mybatis依赖不用单独引了。换句话说,在spring-boot中集成mybatis且连接mysql使用下面两个依赖即可,
1、mybatis-spring-boot-starter
2、mysql-connector-j
访问其他数据库换掉驱动即可。
三、配置文件
我们知道使用mybaits的目的是访问数据库,而且mybatis访问数据库使用的是JDBC驱动的方式,那么配置的话,可以分为两块,
1、mybatis配置
2、JDBC配置文件
3.1、mybatis配置
使用过mybatis的都了解,mybatis是基于xml的,使用xml来写sql实现数据库的访问,java是面向对象的,所以要操作文件,或者说调用xml中的方法需要一个对象,这个对象就是Mapper接口,所以,mybatis的配置文件有两块,一个是配置xml,另一个就是告诉mybatis将xml映射到哪些接口中。
application.yml中配置mybatis的xml
mybatis:
mapper-locations: classpath*:mapper/*.xml
这些xml文件在resource文件夹下,

接下来就是mapper接口,使用@MapperScan注解,在启动类上配置扫描的包

这样就完成了mybatis的配置。接下来就是JDBC的配置。
3.2、JDBC配置文件
结合之前使用JDBC的经验,我们知道要创建一个JDBC连接需要知道数据库驱动名,连接URL、用户名、密码,这些就可以了。这里也是配置这些,在application.yml中进行配置,
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://127.0.0.1:3306/test?serverTimezone=GMT%2B8&autoReconnect=true&allowMultiQueries=true&useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=false
username: root
password: 123456
这样JDBC的配置就可以了。上边的具体配置需要自行修改成自己的。
有小伙伴说不对,我的配置里还有多了一个,
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://127.0.0.1:3306/test?serverTimezone=GMT%2B8&autoReconnect=true&allowMultiQueries=true&useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=false
username: root
password: 123456
type: com.alibaba.druid.pool.DruidDataSource
没错,多的配置是datasource的类型,这里可以不配,默认是com.zaxxer.hikari.HikariDataSource,当然了也可以指定,比如使用c3p0、druid等第三方数据库连接池,这都是可以的(前提引入相关依赖)。不配置默认使用下面三个中的一个,有兴趣的可以看下org.springframework.boot.jdbc.DataSourceBuilder类的实现,

以上,就完成配置。经过这几步就完成了mybatis和spring-boot的集成,是不是很好奇为什么这么简单?下面简单分析下。
四、mybatis是怎么集成到springboot中的
讲这个问题之前,先要达成一个共识:spring是一个bean的容器,管理bean的生命周期。
来看下mybatis中的Mapper接口,该接口会被实例化为一个代理对象,在代理对象中有一个sqlSession的变量,该变量是SqlSessionTemplate类型的,SqlSessionTemplate是mybatis中的类,

它是怎么被注入到spring管理的类中,答案是通过MybatisAutoConfiguration这个类,该类在mybatis-spring-boot-starter中,有这样一个方法,

该方法会生成一个sqlSessionTemplate,这样就可以和mybatis联系在一起了,而更有意思的是下面这个方法,生成sqlSessionFactory的方法,追踪该方法可以看到mybatis的源码中,并熟悉整个流程。

感兴趣的小伙伴可以自己看下源码哦,同时也可以看“推荐阅读”中有关mybaits源码的分析。
五、总结
关于spring-boot集成mybatis的有关问题就分享到这儿了,遵循下面几点,
1、添加相关依赖,mybatis-spring-boot-starter、数据库驱动;
2、mybatis的配置,扫描mapper接口、加载xml文件;
3、数据源配置,驱动类、url、user、password等;
最后,本文用到的源码均可关注下方公众号获得,欢迎与志同道合的你一起交流学习。

推荐阅读
mybatis源码配置文件解析之一:解析properties标签
spring-boot集成mybatis真的很简单吗?的更多相关文章
- 【spring boot】14.spring boot集成mybatis,注解方式OR映射文件方式AND pagehelper分页插件【Mybatis】pagehelper分页插件分页查询无效解决方法
spring boot集成mybatis,集成使用mybatis拖沓了好久,今天终于可以补起来了. 本篇源码中,同时使用了Spring data JPA 和 Mybatis两种方式. 在使用的过程中一 ...
- spring boot集成mybatis(2) - 使用pagehelper实现分页
Spring Boot 集成教程 Spring Boot 介绍 Spring Boot 开发环境搭建(Eclipse) Spring Boot Hello World (restful接口)例子 sp ...
- Spring Boot集成MyBatis开发Web项目
1.Maven构建Spring Boot 创建Maven Web工程,引入spring-boot-starter-parent依赖 <project xmlns="http://mav ...
- spring boot集成mybatis(1)
Spring Boot 集成教程 Spring Boot 介绍 Spring Boot 开发环境搭建(Eclipse) Spring Boot Hello World (restful接口)例子 sp ...
- spring boot集成mybatis(3) - mybatis generator 配置
Spring Boot 集成教程 Spring Boot 介绍 Spring Boot 开发环境搭建(Eclipse) Spring Boot Hello World (restful接口)例子 sp ...
- spring boot集成mybatis只剩两个sql 并提示 Cannot obtain primary key information from the database, generated objects may be incomplete
前言 spring boot集成mybatis时只生成两个sql, 搞了一个早上,终于找到原因了 找了很多办法都没有解决, 最后注意到生成sql的时候打印了一句话: Cannot obtain pri ...
- 详解Spring Boot集成MyBatis的开发流程
MyBatis是支持定制化SQL.存储过程以及高级映射的优秀的持久层框架,避免了几乎所有的JDBC代码和手动设置参数以及获取结果集. spring Boot是能支持快速创建Spring应用的Java框 ...
- spring boot集成MyBatis 通用Mapper 使用总结
spring boot集成MyBatis 通用Mapper 使用总结 2019年 参考资料: Spring boot集成 MyBatis 通用Mapper SpringBoot框架之通用mapper插 ...
- 手把手教你定制标准Spring Boot starter,真的很清晰
写在前面 我们每次构建一个 Spring 应用程序时,我们都不希望从头开始实现具有「横切关注点」的内容:相反,我们希望一次性实现这些功能,并根据需要将它们包含到任何我们要构建的应用程序中 横切关注点 ...
- spring boot 集成 Mybatis,JPA
相对应MyBatis, JPA可能大家会比较陌生,它并不是一个框架,而是一组规范,其使用跟Hibernate 差不多,原理层面的东西就不多讲了,主要的是应用. Mybatis就不多说了,SSM这三个框 ...
随机推荐
- 第一次博客:PTA题目集1-3总结
第一次博客:PTA题目集1-3总结 前言:JAVA是一门非常好的语言,因其面向对象的思想,在解决问题时思路与上学期学习的C语言截然不同,但是其优势也是显然易见的,特别是在写大型程序时其面向对象的思想, ...
- 在 Vue 中控制表单输入
Vue中v-model的思路很简单.定义一个可响应式的text(通常是一个ref),然后用v-model="text"将这个值绑定到一个input上.这就创造了一个双向的数据流: ...
- pythonz之time库常用方法
ime.time() 获取当前时间戳.time.ctime() 当前时间的字符串形式.time.localtime() 当前时间的 struct_time 形式.time.strftime() 用来获 ...
- 彻底解决VSCode无法远程ssh,提示The remote host may not meet VS Code Server‘s prerequisites for glibc and libstdc++
彻底解决VSCode无法远程ssh,提示The remote host may not meet VS Code Server's prerequisites for glibc and libstd ...
- 详解 APISIX Lua 动态调试插件 inspect
作者罗锦华,API7.ai 技术专家/技术工程师,开源项目 pgcat,lua-resty-ffi,lua-resty-inspect 的作者. 原文链接 为什么需要 Lua 动态调试插件? Apac ...
- javasec(五)URLDNS反序列化分析
这篇文章介绍 URLDNS 就是ysoserial中⼀个利⽤链的名字,但准确来说,这个其实不能称作"利⽤链".因为其参数不是⼀个可以"利⽤"的命令,⽽仅为⼀个U ...
- js给元素设置样式
一.style 利用 "[元素].style.[CSS属性名] = [属性值]" 的方法 1 var Box = document.getElementById('box') 2 ...
- [人脸活体检测] 论文:Face Anti-Spoofing Using Patch and Depth-based CNNs
Face Anti-Spoofing Using Patch and Depth-based CNNs 这篇文章是人脸防伪领域比较容易理解,适合入手的一篇,主要运用到了两个CNN网络,根据输入图像的细 ...
- [Pytorch框架] 3.3 通过Sin预测Cos
文章目录 3.3 通过Sin预测Cos 3.3 通过Sin预测Cos %matplotlib inline import torch import torch.nn as nn from torch. ...
- 基于pyinstaller的python打包工具
以下是软件链接:https://mysecreat.lanzoub.com/iZPGf0swgtbc 软件功能:可以对py文件进行打包,功能基于pyinstaller模块,因此需要安装python环境 ...