SpringBoot集成MyBatis-yml自动化配置原理详解

SpringBoot集成MyBatis-yml自动化配置原理详解

        简介:spring boot整合mybatis开发web系统目前来说是市面上主流的框架,每个Java程序和springboot mybatis相处的时间可谓是比和自己女朋友相处的时间都多,但是springboot mybatis并没有得到你的真爱,因为你只是为了养活你女朋友而委曲求全的和spring boot mybatis假意相处。和spring boot mybatis 日夜相处你都不知道 spring boot 怎么和mybatis组合在一起的,yml文件里面的那些配置你都是百度之后复制粘贴进去的,却没有思考过为什么这么配置数据库就生效了?spring就可以加载mybatis了?接下来将会你逐个解释这些问题,缓解一下你和springboot mybatis 假意相处的尴尬。

一、springboot整合mybatis

首页搭建了这样一个工程:

注意pom.xml中加入以下依赖

接下来对代码和配置进行部分展示

启动类

UserController.java

 UserServiceImpl.java

 UserDao.java

Application.yml配置如下:

另外还需要编写一份UserMapper.xml文件,部分代码细节省略,至此工程搭建完成。

二、yml配置详解

项目搭建大家到网上找会有很多案例,简单的案例代码没有什么要讲解的,这里着重讲一下yml配置,很多人使用了很多年都还是不清楚yml里面为什么这么配置,比如spirng.datasources这个哪里来的?配置的参数怎么生效?

1、首先我们需要知道springboot自动装配的原理

springboot定义了一套接口规范,这套规范规定:springboot在启动时会扫描外部引用 jar 包中的META-INF/spring.factories文件,将文件中配置的类型信息加载到。对于外部 jar 来说,只需要按照 springboot定义的标准,就能将自己的功能装置进 springboot。

2、我们看到有个端口配置

这里我们要看spring-boot-autoconfigure,找到META-INF\spring.factories,

找到自动加载的类中

org.springframework.boot.autoconfigure.web.servlet.ServletWebServerFactoryAutoConfiguration

我们可以看到这里自动加载了ServerProperties.class:

3、接下来我们看到有这一段配置

这些的话也是在spring-boot-autoconfigure中自动装配的

org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration

可以看到自动加载了DataSourceProperties.class:

这些就是我们配置的数据库相关的配置了

4、接下来看到了数据源的配置

这个是通过第三方的starter加载进来的,我们在程序中引用了一个druid依赖:

同理我们找到META-INF\spring.factories文件可以发现自动加载了

com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfigure

可以看到这里自动加载了DruidDataSource.class:

这里DruidDataSource继承了DruidAbstractDataSource类,可以找到子类DruidDataSourceWrapper

都这里数据库连接池的配置也找到了。

5、接下来我们看一下mybatis的配置

这里我们需要找一下mybatis-spring-boot-autoconfigure,我们找到mybatis-spring-boot-starter源码包下面,找到META-INF\spring.factories

我们找到这个类

@org.springframework.context.annotation.Configuration

@ConditionalOnClass({ SqlSessionFactory.class, SqlSessionFactoryBean.class })

@ConditionalOnBean(DataSource.class)

@EnableConfigurationProperties(MybatisProperties.class)

@AutoConfigureAfter(DataSourceAutoConfiguration.class)

public class MybatisAutoConfiguration {}

如下MybatisProperties配置类:

这些对应yml中如下的配置:

6、最后还有一个分页插件的配置

这个和druid类似通过第三方的starter加载进来的,我们在程序中引用了一个pagehelper依赖

com.github.pagehelper.autoconfigure.PageHelperAutoConfiguration

这里自动加载了一个PageHelperProperties.class

到此springboot mybatis的配置就讲完了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/13329.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

适用于 Windows 的 5 个最好的 PDF 转换器应用程序

由于稳定性、高分辨率、高安全性、易于传输等特点,PDF已经成为我们日常工作中最常用的格式。我们在享受PDF带来便利的同时,也发现PDF带来了一些不便,其中最大的问题就是PDF内容的编辑难度。同时,并不是所有的文件都是PDF格式的&am…

代码优化- 前端优化

常量折叠 基本思想:在编译期间计算表达式的值(编译时静态计算) 例如:a 3 5 > a 8,if (true && false) ... > if (false) 好处是:语法树的节点数量减少了,意味着编译器要维护…

Ubuntu上跑通PaddleOCR

书接上文。刚才说到我已经在NUC8里灌上了Windows Server 2019。接下来也顺利的启用了Hyper-V角色并装好了一台Ubuntu 22.04 LTS 的虚机。由于自从上回在树莓派上跑通了Paddle-Lite-Demo之后想再研究一下PaddleOCR但进展不顺,因此决定先不折腾了,还是从x6…

【论文写作】如何写科技论文?万能模板!!!(以IEEE会议论文为例)

0. 写在前面 常言道,科技论文犹如“八股文”,有固定的写作模式。本篇博客主要是针对工程方面的论文的结构以及写作链条的一些整理,并不是为了提高或者润色一篇论文的表达。基本上所有的论文,都需要先构思好一些点子,有…

一文搞懂Session和JWT登录认证

前言 目前在开发的小组结课项目中用到了JWT认证,简单分享一下,并看看与Session认证的异同。 登录认证(Authentication)的概念非常简单,就是通过一定手段对用户的身份进行确认。 我们都知道 HTTP 是无状态的&#xf…

强化学习技巧

此软件包处于维护模式,请使用Stable-Baselines3 (SB3)获取最新版本。您可以在 SB3 文档中找到迁移指南。 本节的目的是帮助您进行强化学习实验。它涵盖了有关 RL 的一般建议(从哪里开始、选择哪种算法、如何评估算法等),以及使用自…

【Linux】System V 共享内存、消息队列、信号量

🍎作者:阿润菜菜 📖专栏:Linux系统编程 system V共享内存介绍 System V 共享内存是一种进程间通信的机制,它允许多个进程共享一块物理内存区域(称为“段”)。System V 共享内存的优点是效率高&…

OTG是什么意思?

OTG是什么意思? OTG是怎么样实现的? TYPE-C接口的手机如何实现同时充电OTG功能? OTG是什么意思? OTG是On-The-Go的缩写,是一项新兴技术,主要应用于不同的设备或移动设备间的联接,进行数据交…

基于遥感的自然生态环境检测——实验三:生态因子提取

实验三:生态因子提取 一、实验目标 生态因子生成;生态因子归一化;生态环境评价 二、实验内容 根据经过大气校正后的影像生产土地覆盖指数、土壤指数以及坡度等,对土地覆盖指数、土壤指数以及坡度进行密度分割归一化&#xff1…

“SCSA-T学习导图+”系列:下一代防火墙

本期引言: 近年来,随着数字化业务带给我们高效和便捷的同时,信息暴露面的增加、网络边界的模糊化以及黑客攻击的产业化,使得网络安全事件相较以往成指数级增加。传统防火墙基于五元组的方式对进出网络的数据流量进行访问控制&…

JavaScript(JS)-1.JS基础知识

1.JavaScript概念 (1)JavaScript是一门跨平台,面向对象的脚本语言,来控制网页行为的,它能使网页可交互 (2)W3C标准:网页主要由三部分组成 ①结构:HTML负责网页的基本结构(页面元素和内容)。 …

【Linux网络服务】Linux网络设置

一、查看网络配置 1.1ifconfig 1.2ip a 1.3什么是mtu 最大传输单元MTU,是指网络能够传输的最大数据包大小,以字节为单位。MTU的大小决定了发送端一次能够发送报文的最大字节数。如果MTU超过了接收端所能够承受的最大值,或者是超过了发送路径…

EIGRP 配置,详解拓扑表,路由汇聚

1.3 EIGRP 拓扑,路由以及汇聚 1.3.1 实验目的 通过对 EIGRP 拓扑,路由以及汇聚相关实验的练习,掌握 EIGRP 建立拓扑信息的方式, 度量计算方法,如何调整度量,非等价负载均衡,以及 EIGRP 末节路…

做完自动化测试,但别让不会汇报毁了你...

pytest 是一个成熟的全功能Python测试工具,可以帮助您编写更好的程序。它与 python 自带的 unittest 测试框架类似,但 pytest 使用起来更简洁和高效,并且兼容 unittest 框架。pytest 能够支持简单的单元测试和复杂的功能测试,pyte…

Verilog带参数的`define用法

宏除了可以进行简单的文本替换,还可以像函数和任务一样传递指定多个参数分别对文本进行对应的替换. 示例1: define Disp(pa,pb,pc) \initial \begin \#1200; \$display("%d \n",(papbpc)); \$display(" data_ pa data_ pb data_ pc %d",(…

C#中用程序代码修改了datagridview中的数据,保存时只对光标当前行有保存解决办法

C#中DataGridView绑定了DataTable后,通过代码修改DataGridView中的数据,总有一行(被修改过并被用户选中的行集合中索引为0的行)不能被UpDate回数据库的问题和解决办法 长江黄鹤 2017-06-26 | 300阅读 | 1转藏 转藏全屏朗读分…

真题详解(UML部署图)-软件设计(五十二)

真题详解(地址索引)-软件设计(五十一)https://blog.csdn.net/ke1ying/article/details/130211684 瀑布模式:适应 开发大型项目,且需求明确。 演化模式:适应 对软件需求缺乏准确认知。 螺旋模式&#xff…

【linux】yum “应用商店” 的基本用法

好多工具 yum软件包查看软件包安装软件卸载软件 yum 通俗的讲,这就似我们手机上的应用商店,只不过是在linux下的。 我们可以用yum来下载东西。 软件包 在Linux下安装软件, 一个通常的办法是下载到程序的源代码, 并进行编译, 得到可执行程序。 但是这样…

19 calloc 和 realloc 虚拟内存分配的调试

前言 前面提到了 malloc 虚拟内存分配相关的内容 malloc 虚拟内存分配的调试(1) malloc 虚拟内存分配的调试(2) 这里提 calloc 和 realloc, 这两个函数 虽然没有 malloc 使用频率那么高 但是 还是有很大的知名度的, 本文这里 我们来看一下 calloc 此函数传入两个参数, 第…

Obsidian中如何创作思维导图Mind-map

使用插件 obsidian-mind-map 1.直接在社区下载安装 设置快捷键或者在左侧竖形打开命令面板搜索关键字“mind”, 或者为了便于使用,设置快捷键,在设置-第三方插件中-选择快捷键 然后按下你想设置的快捷键就可以 我这里设置成了CtrlAltM ,M是…