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

news2024/12/23 22:43:07

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的配置就讲完了。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

RabbitMQ--详情概述

一、消息队列(Rabbit Message Queue) 1、概念 消息队列是一种应用之间的通信方式,消息发送之后可以立即返回,由消息系统来确保消息的可靠传递。消息发布者只发布消息到MQ,消息使用者值从MQ中拿消息,两者不知道对方的存在。 简…

Sentinel——限流规则

目录 快速入门 簇点链路 案例 流控模式 流控模式——关联 流控模式——链路 案例 流控效果 流控效果——warm-up 流控效果——排队等待 热点参数限流 快速入门 簇点链路 簇点链路:就是项目内的调用链路,链路中被监控的每个接口就是一个资源。…

【故障检测】基于 KPCA 的故障检测【T2 和 Q 统计指数的可视化】(Matlab代码实现)

💥 💥 💞 💞 欢迎来到本博客 ❤️ ❤️ 💥 💥 🏆 博主优势: 🌞 🌞 🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 …

[前端基础]异步操作(还没写完)

1.写在前面 这篇是因为最近再写异步操作,需要点总结 因为还在学习前端的过程中嘛,所以有些东西可能会慢慢补充上来,也可能会有很多个人理解不是很到位的地方,还望各位评论区佬能帮忙指出.阿里嘎多捏 2.异步操作的概念和举例 异步操作和同步操作在408的三门课程中,都有所提及…

基于php的校园垃圾分类网站的设计与实现

摘要 近年来,随着民众环保意识的增强和资源有效利用问题的重视,全国各地市不断推进垃圾分类工作。教育部,也已于去年发布通知在全国各学校推进垃圾分类工作,以鼓励垃圾分类的有效实施。但现阶段我国校园的垃圾分类践行情况依旧问…

STATS 782 - Control Flow and Functions

文章目录 一、Control Flow1. If-Then-Else2. Loops 二、Functions1. Defining Functions2. 使用函数计算数学公式 总结 一、Control Flow 1. If-Then-Else > if (x > 0) y sqrt(x) else y -sqrt(-x)或 > y if (x > 0) sqrt(x) else -sqrt(-x)2. Loops ① fo…

数组应该怎么用?

文章目录 前言一、数组是什么?二、数组的创建1.数组的创建:2.数组的初始化 三.数组的遍历1.逐个打印2.使用for循环四.二维数组1.语法:2.遍历 五.数组的一些常用方法1.数组转换字符串2.数组拷贝3.二分查找4.冒泡排序5.数组逆序 总结 前言 为什…

动力节点Vue笔记——Vue与Ajax

四、Vue与AJAX 4.1 回顾发送AJAX异步请求的方式 发送AJAX异步请求的常见方式包括: 原生方式,使用浏览器内置的JS对象XMLHttpRequest const xhr new XMLHttpRequest()xhr.onreadystatechange function(){}xhr.open()xhr.send() 原生方式&#xff0…

_awt_container容器_演示

Component作为基类,提供了如下常用的方法来设置组件的大小、位置、可见性等。 方法签名方法功能setLocation(int x,int y)设置组件的位置setSize(int width,int heigth)设置组件的大小setBounds(int x,int y,int width,int heigth)设置组件的位置,大小。…

基于蚂蚁优化算法的BP神经网络在负荷预测中的应用研究(Matlab完整代码实现)

💥💥💥💞💞💞欢迎来到本博客❤️❤️❤️💥💥💥 目录 1 ACO-BP算法 2 ACO-BP算法基本思路 3 具体步骤 4 运行结果 ​ 5 参考文献 6 Matlab代码实现 1 ACO-BP算法 传统的…

数组模拟实现单链表快速操作

前言:我们都知道链表的一般模式是由结构体加指针来实现的,但是在实际的比赛中,结构体指针来实现链表的操作并不常用,原因是因为我们在增加节点时需要开辟新的内存,而比赛时给出的样例大多都是十几万个数据,…

安装配置SVN版本控制管理工具

SVN工具能帮我们做什么? 核心功能:文档版本管理系统 适合对象:个人与团队都可以使用,企业中项目资源的重要管理工具 举例:一个文件夹里面的文档管理 1.下载安装SVN服务器 VisualSVN-Server 2.下载安装SVN客户端 T…

【论文阅读】CVPR2023 IGEV-Stereo

用于立体匹配的迭代几何编码代价体 【cvhub导读】【paper】【code_openi】 代码是启智社区的镜像仓库,不需要魔法,点击这里注册 🚀贡献 1️⃣现有主流方法 基于代价滤波的方法和基于迭代优化的方法: 基于代价滤波的方法可以在c…

大小字母转换

1.代码实例: public class UpString { public static void main(String[] args) { if(args!null && args.length 1){ String str new String(args[0]); System.out.println(“原字符:” str “\n”); String newA str.toUpperCase(); System.out.prin…

C语言分支和循环语句

目录 1.什么是语句😊 2.分支语句(选择结构)😊 2.1 if语句🐾 2.2 switch语句🐾 3.循环语句 😊 3.1 while循环🐾 3.2 for循环🐾 3.3 do...while()循环&#x1f43e…

太太太太太卷了,累了

我们聊到互联网行业的时候,一个不可避免的话题就是“内卷” 在程序员职场上,什么样的人最让人反感呢? 是技术不好的人吗?并不是。技术不好的同事,我们可以帮他。 是技术太强的人吗?也不是。技术很强的同事,可遇不可求&#xff…

C++内联函数的使用

1.内联函数概念 以inline修饰的函数叫做内联函数,编译时C编译器会在调用内联函数的地方展开,没有函数调用建立栈帧的开销,内联函数提升程序运行的效率。 如果在上述函数前增加inline关键字将其改成内联函数,在编译期间编译器会用…

[元来学NVMe协议] NVMe IO 指令集(NVM 指令集)| Flush 命令

声明 主页:元存储的博客_CSDN博客 依公开知识及经验整理,如有误请留言。 个人辛苦整理,付费内容,禁止转载。 内容摘要 前言 NVMe2.0 定义的三类命令集: 管理命令集、IO命令集、Fabrics命令集 Admin Command Set (管理命令集):用于控制器的管理,如创建/销毁IO提交队列…

春秋云境:CVE-2022-25401(任意文件读取漏洞)

目录 一、题目 二、curl访问flag文件 一、题目 介绍: Cuppa CMS v1.0 administrator/templates/default/html/windows/right.php文件存在任意文件读取漏洞 进入题目 是一个登录页面 sql和暴破都无解。 官方POC 国家信息安全漏洞库 cve漏洞介绍 官方给错了目录 …

初阶数据结构之顺序表的增删查改(二)

文章目录 [TOC](文章目录) 前言一、顺序表1.1顺序表的概念1.2顺序表的分类1.3、顺序表的接口定义 二.顺序表的完整实现2.1代码的完成实现 总结 前言 线性表的含义: 线性表(linear list)是n个具有相同特性的数据元素的有限序列。 线性表是一种…