springboot之mybatis整合配置源码分析

SpringBoot整合Mybatis!!附带源码!! 1. 需要注意properties中的配置信息;2. 需要注意在启动类中加@MapperScan注解,表示让项目启动自动取扫描mapper所在的路径;3. 在删除操作中,删除成功后要重定向(redirect)到列表页面;4. 需要注意在页面中使用thymeleaf语法。 阅读详情

一、源码分析

1.添加依赖

<dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>1.3.1</version>
        </dependency>

2.源码

查看mybatis的配置MybatisAutoConfiguration源码,部分源码如下:

@Bean
  @ConditionalOnMissingBean
  public SqlSessionFactory sqlSessionFactory(DataSource dataSource) throws Exception {
    SqlSessionFactoryBean factory = new SqlSessionFactoryBean();
    //给创建的工厂设置数据源
    factory.setDataSource(dataSource);
    factory.setVfs(SpringBootVFS.class);
    //判断properties对象的属性ConfigLocation值是否存在
    //查看properties是MybatisProperties类的对象
    /**
    //根据上面的代码,以及下面的代码片段,可以看出来configLocation是设置MyBatis全局配置文件的路径
    //从下面代码可以看出yml中设置的key值为:mybatis.config-location
	@ConfigurationProperties(prefix = MybatisProperties.MYBATIS_PREFIX)
	public class MybatisProperties {
	  public static final String MYBATIS_PREFIX = "mybatis";
	  
	  //Location of MyBatis xml config file.
	  private String configLocation;
	}
    */
    //此处标记A
    if (StringUtils.hasText(this.properties.getConfigLocation())) {
      factory.setConfigLocation(this.resourceLoader.getResource(this.properties.getConfigLocation()));
    }
    
    //也是从MybatisProperties类的对象properties中获取configuration配置的值
    //如果yml中没有配置mybatis.configuration值,则下面configuration获取为null
    //此处标记B
    Configuration configuration = this.properties.getConfiguration();
    //如果yml中没有配置configuration的值,并且configLocation也未配置时,创建一个空的configuration对象
    if (configuration == null && !StringUtils.hasText(this.properties.getConfigLocation())) {
      configuration = new Configuration();
    }
    //由于上一步创建了一个空的configuration对象,则configuration != null
    //configurationCustomizers这个List<ConfigurationCustomizer>是否不为空
    //满足上面条件,则执行下面方法
    /**
	public interface ConfigurationCustomizer {

   	//Customize the given a {@link Configuration} object.
   	//@param configuration the configuration object to customize
  	void customize(Configuration configuration);
  	
	}
	*/
	//此处标记C
    if (configuration != null && !CollectionUtils.isEmpty(this.configurationCustomizers)) {
      for (ConfigurationCustomizer customizer : this.configurationCustomizers) {
        customizer.customize(configuration);
      }
    }
    //给工厂设置配置信息
    factory.setConfiguration(configuration);
   ....................
  }

3.实例

配置驼峰命名映射关系的方法
先找到控制驼峰命名的属性:
由下面代码可以看出:
控制驼峰命名的属性是在MybatisProperties类下的configuration对象中的mapUnderscoreToCamelCase属性

@ConfigurationProperties(prefix = MybatisProperties.MYBATIS_PREFIX)
public class MybatisProperties {

  public static final String MYBATIS_PREFIX = "mybatis";

  /**
   * A Configuration object for customize default settings. If {@link #configLocation}
   * is specified, this property is not used.
   */
  @NestedConfigurationProperty
  private Configuration configuration;
  .........
}
public class Configuration {

  protected Environment environment;

  protected boolean safeRowBoundsEnabled;
  protected boolean safeResultHandlerEnabled = true;
  //控制是否开启驼峰命名
  protected boolean mapUnderscoreToCamelCase;
  ..........
}
  • 方法一
    从上面MybatisAutoConfiguration源码片段分析:
    标记A处如果在yml中设置了mybatis.config-location值,直接从mybatis的全局配置文件中取
mybatis:
  config-location: classpath:mybatis-config.xml

以及根据上面找到的控制驼峰命名的属性位置,则可在mybatis全局配置文件进行如下赋值

<configuration>
    <settings>
        <setting name="mapUnderscoreToCamelCase" value="true"></setting>
    </settings>
</configuration>
  • 方法二
    标记A处未设置mybatis.config-location值,
    则标记B处直接从MybatisProperties类下的configuration对象获取配置信息,这也就是直接通过yml配置
mybatis:
  configuration:
    mapUnderscoreToCamelCase: true
  • 方法三
    上面两种方法较为常见,最后一种方法:
    当没有设置mybatis.config-location,也没有在yml中配置mybatis.configuration时,我们可以看出,
    在标记B处,会走进if方法,创建一个空的configuration对象
    而在标记C处,只要保证集合List不为空,也是能实现configuration的设值
    从源码看出,ConfigurationCustomizer为一个接口,其customize方法的入参是configuration
    那我们可以自己实现其方法,对configuration进行赋值
@Component
public class MyConfigurationCustomizer implements ConfigurationCustomizer {
    @Override
    public void customize(Configuration configuration) {
        configuration.setMapUnderscoreToCamelCase(true);
    }
}

注意:实现其方法后,要将实现类注入到IOC容器中,这样spring才会将这些对象放入到List

深入探讨狂神SpringBoot源码及应用实践 Spring Initializr提供了丰富的选择器功能,允许用户根据项目类型、编程语言、项目构建工具等选择合适的项目模板。模板选择完毕后,Initializr会根据用户的选择生成相应的项目骨架。此外,Spring Initializr还支持项目模板的自定义。开发者可以编写自己的项目模板,并将其上传至Initializr。自定义模板允许开发者指定自己的项目结构、文件模板和依赖项等。通过这种方式,开发者可以重复使用自己或团队成员创建的项目模板,提高项目生成的效率。 阅读详情

相关推荐

springBoot整合mybatis源码

springBoot整合mybatis源码,直接可以在idea中运行,简单易学,上手快

SpringBoot整合Mybatis源码解析

目录 一、示例代码 1.核心依赖 2.配置(application.yml) 3.核心代码 二、源码分析SpringBoot整合Mybatis的过程 1.SpringBoot集成Mybatis 2.创建MapperScannerConfigurer的bean定义及扫描mapper接口 3.实例化SqlSessionFactory、SqlSessionTemplate及mapper三个bean 3.1. 实例化SqlSessionFactory 3.2. 实例化sqlSessionTemp

zhangyoo 3593

东方财富 vs 新浪 vs AKShare:3 种股票实时数据接口性能与稳定性实测对比

本文深度评测了东方财富、新浪和AKShare三种股票实时数据接口的性能与稳定性。通过实际测试数据,从延迟、成功率和数据完整性三个维度进行全面对比,为量化交易和数据分析开发者提供选型参考。结果显示,东方财富接口在实时性和稳定性方面表现最优,适合高频交易场景。

weixin_30800807的博客 386

Spring Boot v2.4.4源码解析(六)属性绑定篇上 —— 类型安全配置属性

Spring Boot 属性绑定 一、概述 在Spring Boot下开发某个模块,如果这个模块配置属性比较多而且具有层级关系,使用@Value("${property}")注解依次注入这些属性显得比较麻烦。Spring Boot提供了另一种替代方案,可以使用@ConfigurationProperties注解将这些属性绑定到类上。 例如,Mybatis将配置属性绑定到MybatisProperties类上: @ConfigurationProperties(prefix = MybatisProperti

u010141779的博客 1099

解决ArcGIS-OpenStreetMap Toolbox-Load OSM File错误

在安装成功OpenStreetMap Toolbox后,首次运行Load OSM File工具,出现以下错误

Zjf的博客 8820

AppStore逆向分析:从网络抓包到自动化模拟的完整实践

在移动应用生态中,理解客户端与服务器之间的通信协议是进行自动化测试、数据分析和系统集成的关键技术基础。通过分析网络请求与响应,可以深入理解认证、会话管理和数据交换的原理,这对于构建稳定的自动化流程至关重要。其技术价值在于能够实现合法场景下的流程模拟,例如应用元数据监控、沙盒环境测试或内部工具开发。在实际应用场景中,开发者常需处理登录态维持、请求签名验证及风控策略应对等挑战。本文聚焦于AppStore这一封闭生态,详细拆解了其登录、查询等核心环节的通信机制,并探讨了使用Python结合抓包工具进行安全逆向分析

weixin_42524171的博客 926

springboot-MyBatis集成源码

1、springboot注解@SpringBootApplication中的@EnableAutoConfiguration @EnableAutoConfiguration主要是通过AutoConfigurationImportSelector类来加载   分析mybatis也就首先从MybatisAutoConfiguration类分析(该类有Configuration注解,属于配置类) 首先进入MybatisAutoConfiguration类: @org.springframewo..

大灰狼的专栏 2513

电脑硬件:电脑主板上的接口介绍,看完你就懂了

它们主要用于连接老式的键盘和鼠标,虽然速度和兼容性不如USB接口,但在某些特定场合依然发挥着重要作用。PCIe接口是主板上的扩展能力象征,可以连接各种扩展卡,如显卡、声卡、网卡等。电脑主板作为电脑硬件组成关键的部分,今天给大家分享一下电脑主板上有哪些接口,具体每一个接口的特点、使用场景,有需要的朋友可以来了解一下!它们不仅能连接鼠标、键盘、U盘、打印机,还能连接各种外设,如移动硬盘、游戏手柄等。:虽然现在用得越来越少,但在一些特定场合,如工业控制、老旧设备上,仍然需要使用PS/2接口。

IT技术分享社区 2786

SpringBoot与Mybatis整合源码深度解析

问题: SpringBoot中没有Mybatis的配置文件是如何完成对Mybatis的整合? 在Mapper接口上不加@component或者是@repository也能将Mapper注入到Spring中,是如何实现的? 所写的Mapper接口是如何关联到xml里面所写的sql语句的? 如果对于上述三个问题的答案不是很清楚的话,可以往下面,本文将从源码的角度分析SpringBoot与Mybatis整合的源码,对于Spring和Mybatis的整...

qq_35634181的博客 2622

SSE 传输过程中,丢失空格和回车符,怎么解决?

Server - Sent Events(SSE)即服务器发送事件,是 HTML5 中的一项 Web API,用于实现服务器向客户端浏览器推送实时数据的功能。

934

Windows 11 - 打开操作安全中心提示 “需要使用新应用以打开此 Windowsdefender 链接“ 解决方案(电脑更新了 Win11 系统版本后,想关闭病毒防护盾牌的时候提示打不开)

Windows 11 - 打开操作安全中心提示 "需要使用新应用以打开此 Windowsdefender 链接" 解决方案(电脑更新了 Win11 系统版本后,想关闭病毒防护盾牌的时候提示打不开),当您点击任务栏上要关闭安全中心防护设置时,这种情况打不开怎么解决,怎么办,Windows安全中心,病毒和威胁保护,账户保护,防火墙和网络保护,设备安全性。

🏆 前端领域优质创作者 1万+

Spring Boot 自动配置源码分析(举例:Spring Boot 与 Redis 的整合、MyBatis 与 Spring Boot 的整合)

1. 自动配置源码解析 使用 Spring Boot 开发较之以前的基于 xml 配置式的开发,要简捷方便快速的多。而这完全得益于 Spring Boot 的自动配置。下面就通过源码阅读方式来分析自动配置的运行原理。 1.1 解析@SpringBootApplication 打开启动类的@SpringBootApplication 注解源码。 我们发现@SpringBootApplication 注解其实就是一个组合注解。 注解是 JDK5 中的新特性(2004 年),Spring 第一个版本是 2003

语雀同名:犬豪 yuque.com/qhao 298

以 DeleteRestrictions 与 inlineDelete 为核心的 Fiori Elements 表格删除机制全解

SAP Fiori elements 中删除操作的设计与实现涉及多维度考量。框架默认依据 OData 元数据判断删除能力,通过 DeleteRestrictions 注解实现行级条件控制(deletable-path)。表格支持两种删除模式:工具栏集中删除与响应式表格行内删除,但二者不建议混用。关键约束包括:行内删除仅适用于 Responsive Table,且与多选功能互斥。配置需遵循三层架构:后端能力注解、前端表格形态和运行时交互。设计上强调禁用优于隐藏的可用性原则,并需保持列表页与对象页的删除体验一致

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 153

【MyBatis】MyBatis与Spring和Spring Boot整合原理

讲解Spring Boot如何整合MyBatis,并分析其原理。

小七的博客 1620

EtherCAT主站SOEM -- 1 -- SOEM之ethercattype.h文件分析

“ethercattype.h” 文件用于支持 EtherCAT 网络通信,提供了各种类型定义和宏,以便开发者更轻松地开发 EtherCAT 相关应用程序。这些定义包括数据类型、命令类型、状态类型和错误类型,以支持 EtherCAT 通信。根据具体应用需求,还可以调整一些超时和帧长度设置。这些定义用于处理函数调用的结果,如 EC_NOFRAME(没有帧返回)、EC_ERROR(一般错误)、EC_TIMEOUT(请求超时)等。这些定义用于处理 EtherCAT 命令,例如 EC_CMD_APRD(自动递增读取

常驻客栈的博客--嵌入式EtherCAT 2714

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

手写springboot_Spring/SpringBoot文章精选!!!

Spring Boot 2.x 源码分析(全)新整理的SpringBoot注解大全SpringBoot注解大全,收藏一波!!!Spring Boot自动配置原理、实战SpringBoot 并发登录人数控制使用Spring Boot很简单,go!!!什么是Spring Boot?Spring Boot 核心配置文件详解在Spring boot中使用 AOP 如何防止重复提交!!!手写Spr...

weixin_35763448的博客 76

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

Spring Boot 集成mybatis 源码解析

  Spring Boot项目中集成mybatis来开发项目,我相信每个用Spring boot 的小伙伴都使用过,感觉就是特别爽,在yml文件中配置一下,就能对数据库进行访问了,其实现原理是什么呢?带着疑问,我们走进代码。 在pom.xml文件中新增配置 <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-start

黄裳博客 1035

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

springboot2与mybaties整合

在实际项目中,应该很少有不使用数据库的项目吧,目前来看,大部分的公司使用的都是mysql+mybaties做持久化存储。因此,在这里为大家讲解一下springboot与mybaties应该如何整合。以下内容纯属个人见解,若有不对的地方,望大家指正。 项目搭建 通过第一篇文章,我们已经能够很熟练的搭建springboot项目了,这里,我们就减少项目搭建的步骤,若大家不会搭建,可以返回第一篇文章了...

二月初二 530

SpringBoot简介

SpringBoot 第一部分 SpringBoot应用 相关概念 约定优于配置 约定优于配置(Convention over Configuration),又称按约定编程,是一种软件设计规范。 本质上是对系统、类库或框架中一些东西假定一个大众化合理的默认值(缺省值)。 例如在模型中存在一个名为User的类,那么对应到数据库会存在一个名为user的表,此时无需做额外的配置,只有在偏离这个约定时才需要做相关的配置(例如你想将表名命名为t_user等非user时才需要写关于这个名字的配置)。 如果所用工具的约定

olive 3228

(一)MyBatis整合SpringBoot源码解析——整体大纲

本文旨在解析MyBatis与SpringBoot的整合过程中的关键流程,并通过分析源代码来展示其实现原理。

qq_37888418的博客 148

SpringBoot | 3.3 整合MyBatis-Plus

SpringBoot整合MyBatis-Plugs前言1.2.3.最后 前言 注:在说明注解时,第一点加粗为注解中文含义,第二点为一般加在哪身上,缩进或代码块为示例,如: @注解 中文含义 加在哪 其他…… 语句示例 //代码示例 1. 2. 3. 最后 新人制作,如有错误,欢迎指出,感激不尽! 欢迎关注公众号,会分享一些更日常的东西! 如需转载,请标注出处! ...

多氯环己烷的博客 1055

Spring Boot2 系列教程(二十一)整合 MyBatis,2024年最新附架构师必备技术详解

在面试前我整理归纳了一些面试学习资料,文中结合我的朋友同学面试美团滴滴这类大厂的资料及案例由于篇幅限制,文档的详解资料太全面,细节内容太多,所以只把部分知识点截图出来粗略的介绍,每个小节点里面都有更细化的内容!大家看完有什么不懂的可以在下方留言讨论也可以关注。一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

2401_84138785的博客 337

SpringBoot小结之MyBatis

前言 Mybatis是一款优秀的Java ORM框架,它是对传统JDBC编程的增强 ORM(Object Relational Mapping) 对象关系映射,就是数据库的表与POJO(plain old Java object)两者映射 JDBC(Java Database Connectivity) Java数据库连接,它是API,定义了Java 程序如何访问数据库。最早在SUN公司在1997发布的JDK1.1就包含它,java.sql 和 javax.sql这两个包就包含相关类 传统的JA

十十办文武的博客 430

mybatis_实战_mybatis&springboot整合

零基础入门mybatis,springboot整合mybatis.

Ernie_linyerun的博客 1242

mybatis的数据库连接池

666

weixin_70280523的博客 768

框架总结

spring总结 1.介绍:spring核心ioc,aop容器框架 ioc:控制反转,对象的创统一交给spring容器创建,DI,依赖注入,指的是spring再创建bean对象时,动态将依赖对象注入到组件中 aop:面向切面编程,在不修改原代码的情况下,增强ioc容器中bean的功能 spring容器:ioc容器,底层实现时beanfactory 2.ioc注解:@controller,@service,@repository,@component di注解:@autoware(根据类型注入),@resou

tongkai693的博客 121
上一篇: druid以及监控台使用及配置
下一篇: springBoot项目整合mybatis
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值