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这三个框 ...
随机推荐
- Trie树结构
PrefixTree 208. 实现 Trie (前缀树) Trie(发音类似 "try")或者说 前缀树 是一种树形数据结构,用于高效地存储和检索字符串数据集中的键.这一数据结构 ...
- 单元测试Mockito框架
单元测试Mockito框架 Mock 测试就是在测试过程中,对于某些 不容易构造(如 HttpServletRequest 必须在 Servlet 容器中才能构造出来)或者不容易获取 比较复杂 的对象 ...
- PTA题目总结
(1)前言:第一次题目集主要考察JAVA的一些语法知识,比如,控制台的输入,输出时保留两位小数,数组的使用,第十题有点难度,当时没写出来,现在想想 也还好,就是读懂题目有点费劲,第一次题目的题量比较大 ...
- flutter系列之:在flutter中使用媒体播放器
目录 简介 使用前的准备工作 在flutter中使用video_player 总结 简介 现在的app功能越来越强大,除了基本的图文之外,还需要各种各样的其他的功能,比如视频,和直播. 直播可能会比较 ...
- 使用GithubAction自动构建部署项目
目录 1.1 项目准备 2.1 GithubAction设置 3.1 运行测试 4.1 小结 GitHub Actions 是一种持续集成和持续交付(CI/CD) 平台,可用于自动执行生成.测试和部署 ...
- [GIT]辨析/区别: git add -u | git add -A | git add . [转载]
参考文献 git add -u与-A .三者的区别 - CSDN
- tcp,udp tcp三次握手四次挥手,基于套接字进行简单通信
1.应用层: 应用层功能:规定应用程序的数据格式. 例:TCP协议可以为各种各样的程序传递数据,比如Email.WWW.FTP等等.那么,必须有不同协议规定电子邮件.网页.FTP数据的格式,这些应用程 ...
- Clion+dap仿真器,移植stm32项目
如何将Keil项目移植到Clion,先看几位大佬的文章: 稚晖君的回答:配置CLion用于STM32开发[优雅の嵌入式开发] 野火论坛:DAP仿真器的使用教程 wuxx:nanoDAP使用疑难杂症解析 ...
- 2023年成都.NET线下技术沙龙活动即将到来!
MASA技术团队联合成都.NET俱乐部,将在成都市举办一场.NET线下技术沙龙,为.NET开发者创造一次交流学习的契机,我们邀请到的几位技术大咖,将会围绕各自的主题向大家分享他们的技术心得. 本场沙龙 ...
- Deep-DRM算法理解
title: GCN学习笔记 categories: - 生物信息学 date: 2023-03.13 hidden: true mathjax: true GCN GCN(Graph Convolu ...