在日常的后端开发中,使用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等;

最后,本文用到的源码均可关注下方公众号获得,欢迎与志同道合的你一起交流学习。

推荐阅读

我的第一个springboot  starter

mybatis源码配置文件解析之一:解析properties标签

springboot引入mybatis遇到的坑

spring-boot集成mybatis真的很简单吗?的更多相关文章

  1. 【spring boot】14.spring boot集成mybatis,注解方式OR映射文件方式AND pagehelper分页插件【Mybatis】pagehelper分页插件分页查询无效解决方法

    spring boot集成mybatis,集成使用mybatis拖沓了好久,今天终于可以补起来了. 本篇源码中,同时使用了Spring data JPA 和 Mybatis两种方式. 在使用的过程中一 ...

  2. spring boot集成mybatis(2) - 使用pagehelper实现分页

    Spring Boot 集成教程 Spring Boot 介绍 Spring Boot 开发环境搭建(Eclipse) Spring Boot Hello World (restful接口)例子 sp ...

  3. Spring Boot集成MyBatis开发Web项目

    1.Maven构建Spring Boot 创建Maven Web工程,引入spring-boot-starter-parent依赖 <project xmlns="http://mav ...

  4. spring boot集成mybatis(1)

    Spring Boot 集成教程 Spring Boot 介绍 Spring Boot 开发环境搭建(Eclipse) Spring Boot Hello World (restful接口)例子 sp ...

  5. spring boot集成mybatis(3) - mybatis generator 配置

    Spring Boot 集成教程 Spring Boot 介绍 Spring Boot 开发环境搭建(Eclipse) Spring Boot Hello World (restful接口)例子 sp ...

  6. 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 ...

  7. 详解Spring Boot集成MyBatis的开发流程

    MyBatis是支持定制化SQL.存储过程以及高级映射的优秀的持久层框架,避免了几乎所有的JDBC代码和手动设置参数以及获取结果集. spring Boot是能支持快速创建Spring应用的Java框 ...

  8. spring boot集成MyBatis 通用Mapper 使用总结

    spring boot集成MyBatis 通用Mapper 使用总结 2019年 参考资料: Spring boot集成 MyBatis 通用Mapper SpringBoot框架之通用mapper插 ...

  9. 手把手教你定制标准Spring Boot starter,真的很清晰

    写在前面 我们每次构建一个 Spring 应用程序时,我们都不希望从头开始实现具有「横切关注点」的内容:相反,我们希望一次性实现这些功能,并根据需要将它们包含到任何我们要构建的应用程序中 横切关注点 ...

  10. spring boot 集成 Mybatis,JPA

    相对应MyBatis, JPA可能大家会比较陌生,它并不是一个框架,而是一组规范,其使用跟Hibernate 差不多,原理层面的东西就不多讲了,主要的是应用. Mybatis就不多说了,SSM这三个框 ...

随机推荐

  1. 第一次博客:PTA题目集1-3总结

    第一次博客:PTA题目集1-3总结 前言:JAVA是一门非常好的语言,因其面向对象的思想,在解决问题时思路与上学期学习的C语言截然不同,但是其优势也是显然易见的,特别是在写大型程序时其面向对象的思想, ...

  2. 在 Vue 中控制表单输入

    Vue中v-model的思路很简单.定义一个可响应式的text(通常是一个ref),然后用v-model="text"将这个值绑定到一个input上.这就创造了一个双向的数据流: ...

  3. pythonz之time库常用方法

    ime.time() 获取当前时间戳.time.ctime() 当前时间的字符串形式.time.localtime() 当前时间的 struct_time 形式.time.strftime() 用来获 ...

  4. 彻底解决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 ...

  5. 详解 APISIX Lua 动态调试插件 inspect

    作者罗锦华,API7.ai 技术专家/技术工程师,开源项目 pgcat,lua-resty-ffi,lua-resty-inspect 的作者. 原文链接 为什么需要 Lua 动态调试插件? Apac ...

  6. javasec(五)URLDNS反序列化分析

    这篇文章介绍 URLDNS 就是ysoserial中⼀个利⽤链的名字,但准确来说,这个其实不能称作"利⽤链".因为其参数不是⼀个可以"利⽤"的命令,⽽仅为⼀个U ...

  7. js给元素设置样式

    一.style 利用 "[元素].style.[CSS属性名] = [属性值]" 的方法 1 var Box = document.getElementById('box') 2 ...

  8. [人脸活体检测] 论文:Face Anti-Spoofing Using Patch and Depth-based CNNs

    Face Anti-Spoofing Using Patch and Depth-based CNNs 这篇文章是人脸防伪领域比较容易理解,适合入手的一篇,主要运用到了两个CNN网络,根据输入图像的细 ...

  9. [Pytorch框架] 3.3 通过Sin预测Cos

    文章目录 3.3 通过Sin预测Cos 3.3 通过Sin预测Cos %matplotlib inline import torch import torch.nn as nn from torch. ...

  10. 基于pyinstaller的python打包工具

    以下是软件链接:https://mysecreat.lanzoub.com/iZPGf0swgtbc 软件功能:可以对py文件进行打包,功能基于pyinstaller模块,因此需要安装python环境 ...