6)Mybatis启动流程

spring boot 2集成mybatis activiti 6 工作流开发。 activiti6的集成开发一、安装eclipse的activiti插件1. 安装activiti插件。2.绘制工作流的流程图二、 spring boot2 集成mybatis和activiti61. 引入依赖。2 修改配置三 流程相关的开发1.启动流程2.查询待审核任务3 执行任务查询工作相关的方法 一、安装eclipse的activiti插件 eclipse对activiti插件的集成友好点,工作流的流程图使用eclipse进行绘图。 1. 安装activiti插件。 Name:Activit 阅读详情

1. 首先Mybatis会加载配置文件mybatis-config.xml, 主要实现在Mybatis的builder模块,包路径org.apache.ibatis.builder,解析入口XMLConfigBuilder

  

  private void settingsElement(Properties props) {
    configuration.setAutoMappingBehavior(AutoMappingBehavior.valueOf(props.getProperty("autoMappingBehavior", "PARTIAL")));
    configuration.setAutoMappingUnknownColumnBehavior(AutoMappingUnknownColumnBehavior.valueOf(props.getProperty("autoMappingUnknownColumnBehavior", "NONE")));
    configuration.setCacheEnabled(booleanValueOf(props.getProperty("cacheEnabled"), true));
    configuration.setProxyFactory((ProxyFactory) createInstance(props.getProperty("proxyFactory")));
    configuration.setLazyLoadingEnabled(booleanValueOf(props.getProperty("lazyLoadingEnabled"), false));
    configuration.setAggressiveLazyLoading(booleanValueOf(props.getProperty("aggressiveLazyLoading"), false));
    configuration.setMultipleResultSetsEnabled(booleanValueOf(props.getProperty("multipleResultSetsEnabled"), true));
    configuration.setUseColumnLabel(booleanValueOf(props.getProperty("useColumnLabel"), true));
    configuration.setUseGeneratedKeys(booleanValueOf(props.getProperty("useGeneratedKeys"), false));
    configuration.setDefaultExecutorType(ExecutorType.valueOf(props.getProperty("defaultExecutorType", "SIMPLE")));
    configuration.setDefaultStatementTimeout(integerValueOf(props.getProperty("defaultStatementTimeout"), null));
    configuration.setDefaultFetchSize(integerValueOf(props.getProperty("defaultFetchSize"), null));
    configuration.setDefaultResultSetType(resolveResultSetType(props.getProperty("defaultResultSetType")));
    configuration.setMapUnderscoreToCamelCase(booleanValueOf(props.getProperty("mapUnderscoreToCamelCase"), false));
    configuration.setSafeRowBoundsEnabled(booleanValueOf(props.getProperty("safeRowBoundsEnabled"), false));
    configuration.setLocalCacheScope(LocalCacheScope.valueOf(props.getProperty("localCacheScope", "SESSION")));
    configuration.setJdbcTypeForNull(JdbcType.valueOf(props.getProperty("jdbcTypeForNull", "OTHER")));
    configuration.setLazyLoadTriggerMethods(stringSetValueOf(props.getProperty("lazyLoadTriggerMethods"), "equals,clone,hashCode,toString"));
    configuration.setSafeResultHandlerEnabled(booleanValueOf(props.getProperty("safeResultHandlerEnabled"), true));
    configuration.setDefaultScriptingLanguage(resolveClass(props.getProperty("defaultScriptingLanguage")));
    configuration.setDefaultEnumTypeHandler(resolveClass(props.getProperty("defaultEnumTypeHandler")));
    configuration.setCallSettersOnNulls(booleanValueOf(props.getProperty("callSettersOnNulls"), false));
    configuration.setUseActualParamName(booleanValueOf(props.getProperty("useActualParamName"), true));
    configuration.setReturnInstanceForEmptyRow(booleanValueOf(props.getProperty("returnInstanceForEmptyRow"), false));
    configuration.setLogPrefix(props.getProperty("logPrefix"));
    configuration.setConfigurationFactory(resolveClass(props.getProperty("configurationFactory")));
    configuration.setShrinkWhitespacesInSql(booleanValueOf(props.getProperty("shrinkWhitespacesInSql"), false));
    configuration.setArgNameBasedConstructorAutoMapping(booleanValueOf(props.getProperty("argNameBasedConstructorAutoMapping"), false));
    configuration.setDefaultSqlProviderType(resolveClass(props.getProperty("defaultSqlProviderType")));
    configuration.setNullableOnForEach(booleanValueOf(props.getProperty("nullableOnForEach"), false));
  }

加载配置入口: org.apache.ibatis.builder.xml.XMLConfigBuilder#parseConfiguration

  1. 加载properties节点 , 将配置中变量加载到mybatis上下文中
  2. 加载settings节点, 初始化或者定制化configuration中属性
  3. 加载typeAliases节点, 添加类型别名映射器
  4. 加载plugins节点, 添加一些插件处理器
  5. 加载objectFactory节点,指定对象创建工厂类
  6. 加载objectWrapperFactory节点,指定对象创建工厂类
  7. 加载reflectorFactory节点,指定对象反射处理工厂类
  8. 加载environments节点, 定制化环境配置,例如不同环境不同数据库连接配置
  9. 加载databaseIdProvider节点,获取不同数据源的databaseId
  10. 加载typeHandlers节点, 添加类型处理器
  11. 加载mappers节点,添加Mapper

蒋加载的配置信息统计存储在org.apache.ibatis.session.Configuration

2. Mybatis加载具体的Mapper.xml文件,XMLMapperBuilder

加载配置入口: org.apache.ibatis.builder.xml.XMLMapperBuilder#parse

1. org.apache.ibatis.builder.xml.XMLMapperBuilder#configurationElement 加载Mapper节点配置

  • 获取namespace属性, 设置namespace
  • 加载cache-ref节点配置, 加载缓存配置
  • 加载cache节点配置, 加载缓存配置,MapperBuilderAssistant#useNewCache
  • 加载/mapper/parameterMap节点配置, 加载ParameterMapping配置
  •  加载ResultMapping配置,MapperBuilderAssistant#buildParameterMapping
  • 加载/mapper/resultMap节点配置, 加载ResultMapping配置,MapperBuilderAssistant#buildResultMapping
  • 加载/mapper/sql节点配置, 加载sql配置
  • 加载select|insert|update|delete节点配置, 构造MappedStatement配置, org.apache.ibatis.builder.xml.XMLStatementBuilder#parseStatementNode

2. org.apache.ibatis.builder.xml.XMLMapperBuilder#bindMapperForNamespace 将xml文件配置的具体java接口注册到MapperRegistry

  •  org.apache.ibatis.session.Configuration#addMapper
  • org.apache.ibatis.binding.MapperRegistry#addMapper

3. XMLMapperBuilder#parsePendingResultMaps 加载未解析成功的ResultMapping配置

4. XMLMapperBuilder#parsePendingCacheRefs 加载上面为解析成功的Cache配置

5. XMLMapperBuilder#parsePendingStatements 加载上面为解析成功的MappedStatement配置

3. Mybatis加载mapper文件中具体的某个SQL语句,XMLStatementBuilder

解析入口: org.apache.ibatis.builder.xml.XMLStatementBuilder#parseStatementNode

  • 构建sql语句即 SqlSource 对象,LanguageDriver#createSqlSource
  • 构建MapperStatement, MapperBuilderAssistant#addMappedStatement()

4. Mybatis构建SqlSource对象,org.apache.ibatis.scripting.LanguageDriver

 

接口: org.apache.ibatis.scripting.LanguageDriver

实现:

org.apache.ibatis.scripting.xmltags.XMLLanguageDriver
org.apache.ibatis.scripting.defaults.RawLanguageDriver

接口: org.apache.ibatis.scripting.xmltags.SqlNode sql节点

实现:

org.apache.ibatis.scripting.xmltags.ChooseSqlNode
org.apache.ibatis.scripting.xmltags.ForEachSqlNode
org.apache.ibatis.scripting.xmltags.IfSqlNode
org.apache.ibatis.scripting.xmltags.MixedSqlNode
org.apache.ibatis.scripting.xmltags.SetSqlNode
org.apache.ibatis.scripting.xmltags.TrimSqlNode
org.apache.ibatis.scripting.xmltags.WhereSqlNode 等等

接口: org.apache.ibatis.scripting.xmltags.XMLScriptBuilder.NodeHandler 节点处理器

org.apache.ibatis.scripting.xmltags.XMLScriptBuilder.BindHandler

org.apache.ibatis.scripting.xmltags.XMLScriptBuilder.WhereHandler

org.apache.ibatis.scripting.xmltags.XMLScriptBuilder.SetHandler        

org.apache.ibatis.scripting.xmltags.XMLScriptBuilder.ChooseHandler等等

解析入口:XMLLanguageDriver#createSqlSource

1. org.apache.ibatis.scripting.xmltags.XMLScriptBuilder#parseScriptNode

  • org.apache.ibatis.scripting.xmltags.DynamicSqlSource
  • org.apache.ibatis.scripting.defaults.RawSqlSource
【Mybatis 源码】 Mybatis 是如何解析配置文件中的内容 -- settings Mybatis 是如何解析配置文件中的内容 -- settings 阅读详情

相关推荐

Mybatis配置加载流程完全图解,建造者模式的优雅应用

建造者模式(BuilderPattern)使用多个简单的对象一步一步构建成一个复杂的对象。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。建造者模式类图如下:Product:要创建的复杂对象Builder:给出一个抽象接口,以规范产品对象的各个组成成分的建造。这个接口规定要实现复杂对象的哪些部分的创建,并不涉及具体的对象部件的创建;:实现 Builder 接口,针对不同的商业逻辑,具体化复杂对象的各部分的创建。在建造过程完成后,提供产品的实例;Director。

m0_73311735的博客 1188

mybatis org.apache.ibatis.session.Configuration.setArgNameBasedConstructorAutoMapping错误

mybatis、mybatis-spring不能和mybatis-plus一起用。SSM工程集成Mybatis-plus报错。

zhu714702382的博客 2539

Springboot集成activiti6.0踩坑实践

一、springboot2.0集成activiti6.0 1.1引入jar包 <dependency> <groupId>org.activiti</groupId> <artifactId>activiti-spring-boot-starter-basic</artifactId> <version>6.0.0</version> </dependency> 1.2配置myibatis,生成28张表

hanguofei的博客 1148

MyBatis框架

MyBatis框架 资料来自于尚硅谷教育,视频地址:https://www.bilibili.com/video/BV1mW411M737 第1章 MyBatis简介 1.1 MyBatis历史 1)MyBatis是Apache的一个开源项目iBatis, 2010年6月这个项目由Apache Software Foundation 迁移到了Google Code,随着开发团队转投Google Code旗下, iBatis3.x 正式更名为MyBatis ,代码于2013年11月迁移到Github 2

qq_34676998的博客 846

5分钟快速启动飞鱼系统:从零到运行完整指南

本文提供飞鱼管理系统的完整启动流程,通过详细的操作步骤和命令演示展示了从环境检查到系统访问的全过程。包含数据库初始化、配置文件修改、编译打包、服务启动、故障排查等5个核心环节,6个常见启动问题解决方案和完整的自动化启动脚本,帮助开发者在5分钟内完成系统启动。适合Java后端开发工程师、运维工程师阅读,助你快速搭建开发测试环境。

腾讯云创作之星、华为云云享专家,深耕电商全栈高并发系统实战,分享可商用商城项目源码。 570

SpringBoot整合MyBatisPlus启动报错解决方案

在Java企业级开发中,SpringBoot与MyBatisPlus的整合是常见的ORM框架组合。当Spring容器初始化时,SqlSessionFactoryBean会进行严格的类型检查,确保factoryBeanObjectType属性类型匹配。这一机制在Spring 6.x版本中变得更加严格,可能导致类型转换异常。通过分析版本兼容性问题,可以找到稳定的依赖组合方案。本文针对常见的'Invalid value type for attribute'错误,提供了版本匹配和配置调整两种解决方案,并详细介绍了

weixin_33423874的博客 22

已有的项目中添加流程控制,activiti6.0基于springboot2.0开发部署及mybatisplus3.2.0,及遇到的问题

下载activiti插件(我用的是eclipse开发工具) 新建项目时出现上面的就证明安装成功了,这里不具体记录了;安装成功就可以画流程图了; 打开已有的项目,在pom.xml中添加activiti依赖jar包; <dependency> <groupId>org.activiti</groupId> <artifactId>act...

奋斗中的小码农博客 533

mybatis的运行流程

MyBatis的运行流程分为三大阶段:初始化阶段:读取 XML 配置文件和注解中的配置信息,创建配置对象,并完成各个模块的初始化的工作; 代理封装阶段:封装 iBatis 的编程模型,使用 mapper 接口开发的初始化工作; 数据访问阶段:通过 SqlSession 完成 SQL 的解析,参数的映射、SQL 的执行、结果的解析过程; 为了熟悉Mybatis的运行流程,我们先看一段代码 public class MybatisDemo { ​ private SqlSessionFactory sql

计算机毕业论文源码,学生个人网页制作html源码。贴近用户做网络推广和互联网优化。 626

activiti6使用redis缓存流程定义

activiti6使用redis缓存流程定义

m0_37539286的博客 903

【processing】创意编程

首先接到这个作业的时候,我是很崩溃的,我是真的不会画画QAQ,还画自己,这也太难了,于是我决定!还是祸害我爱豆吧!于是我从微博太太那里找了个图临摹 下面是太太的图 先给太太道歉!都是为了作业! 然后我画出来是这样子的 还可以!!!没有特别丑!(虽然也不是特别像吧) 但是画这个真是画死我了,下面贴上代码吧,没啥特殊的就是各种贝塞尔曲线各种圆各种线 //face stroke(70,27,11...

qq_25700571的博客 1267

【仓颉 + 鸿蒙 + AI Agent】CangjieMagic框架(3):Agent请求和响应

CangjieMagic框架:使用华为仓颉编程语言编写,专门用于开发AI Agent,支持鸿蒙、Windows、macOS、Linux等系统。这篇文章剖析一下 CangjieMagic 框架中的 AgentRequest 和 AgentResponse。

九丘教育官方博客 1475

10 分钟跑起来 RuoYi-Vue-Plus:从克隆到服务启动的完整路径

当业务开始按公司、按部门拆账,"数据要按租户隔离"这句话一写出来,单租户架构就有点撑不住了:紧接着还会被要求分布式部署、审批工作流、分布式定时任务、统一文件存储……每一样自己从零搭,工期直接腰斩。RuoYi-Vue-Plus 就是冲着这个痛点来的:它把 RuoYi-Vue 的所有业务重写了一遍,做成一套面向分布式集群的多租户后台管理系统,多租户隔离、Sa-Token 认证、WarmFlow 工作流

gitblog_01155的博客 373

三相SVPWM逆变器双闭环PI解耦控制:从dq坐标系到参数整定实战

本文深入解析了三相SVPWM逆变器的双闭环PI解耦控制技术。通过引入dq坐标系,将交流量转换为直流量,并结合前馈补偿实现电流环的解耦控制。文章详细阐述了从数学模型推导、控制器设计到参数整定与SVPWM实现的完整流程,为工程师提供了从理论到实战的系统性指导。

weixin_28292761的博客 404

【MyBatis】MyBatis 启动流程

1.概述 转载:MyBatis 启动流程 MyBatis 是第一个支持自定义 SQL、存储过程和高级映射的类持久框架。MyBatis 消除了大部分 JDBC 的样板代码、手动设置参数以及检索结果。MyBatis 能够支持简单的 XML 和注解配置规则。使 Map 接口和 POJO 类映射到数据库字段和记录。 2.MyBatis 的特点 那么 MyBatis 具有什么特点呢?或许我们可以从如下几个方面来描述 MyBatis 中的 SQL 语句和主要业务代码分离,我们一般会把 MyBatis 中的 SQL 语.

九师兄 1730

个人信息保护合规审计人员(中级)能力测试试卷

本文是关于个人信息保护合规考试的试题解析,内容涵盖《个人信息保护法》相关规定。试卷包含单选题、多选题、判断题、简答题和案例分析题五种题型,总分100分,考试时间120分钟。试题重点考察个人信息处理的基本原则、敏感个人信息处理要求、合规审计流程、个人信息保护影响评估等内容。通过案例分析题详细解析了人脸识别登录、数据共享、跨境传输等场景下的合规要求。参考答案均严格依据《个人信息保护法》等法律法规,为个人信息处理活动提供了明确的合规指引。

qq_41525079的博客 850

轻量化部署实战:C#上位机集成AI模型的3种方案深度对比(ML.NET/ONNX/TensorFlow.NET)

C#上位机部署AI模型,核心不是“选最强大的方案”,而是“选最适配的方案”——工控机的低配置、高稳定性需求,决定了“轻量化”和“部署简单”是选型的首要原则。回顾3种方案:ML.NET:原生、轻量化、零依赖,适合传统ML场景,低配置工控机首选;ONNX Runtime:通用、平衡、易落地,适合深度学习场景,工业落地首选;TensorFlow.NET:强大、灵活、纯C#,适合复杂模型,高配置工控机首选。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 364

MyBatis启动流程

1.MyBatis简介       MyBatis本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis 。它支持普通 SQL查询,存储过程和高级映射的优秀持久层框架。MyBatis 消除了几乎所有的JDBC代码和参数的手工设置以及结果集的检索。MyBatis 使用简单的

CZengze的专栏 6467

X电容与Y电容,看这一篇就够了

本文详细介绍了X电容与Y电容的定义、作用、位置、分类,以及它们在实际应用中的容值选取和计算方法。通过汽车电子应用和X电容放电电路的实例,帮助读者深入理解这两种安规电容的重要性。文章还探讨了电容放电电阻的计算,确保符合安全规范。

让你爱上电路设计 7018

MyBatis 启动流程 详解

相比于其他的组件就简单很多了,ParameterHandler 译为参数处理器,负责为 PreparedStatement 的 sql 语句参数动态赋值,这个接口很简单只有两个方法ParameterHandler 只有一个实现类, 它实现了这两个方法。getParameterObject: 用于读取参数setParameters: 用于对 PreparedStatement 的参数赋值ResultSetHandler 也是一个非常简单的接口。

白话机器学习 653

【IoT】 产品设计之结构设计:如何设计产品按键

1、硅胶按键功能实现有两种接触方式 1)硅胶按键按压在DOME片(锅仔片)上 通常用在手机、儿童手表手机、防水手机等防水设备上。 2)硅胶按键增加导电基,一种黑色的导电碳粒,实现回路导电 通常用在遥控器、电脑键盘、特殊设备上。 两种方式结构设计原理是一样的,按键的固定与配合间隙与行程要确保好。 2、硅胶遥控器按键的结构方式(导电基) 按键帽为大颗粒实心的,触点为黑色导电基,通过压注成型融合为一体,那么这种按键结构设计时需要注意那些呢? 最主要的是按键按压回弹的手感,由于没有DOME片实现

产品线负责人 8670

GraphRAG深度解析:架构设计与实战案例

生成模块结合检索到的图数据和用户输入的查询,生成高质量的文本输出。通过结合图数据库中的知识,模型可以更准确地回答用户的问题,提供更优质的客户服务。通过分析用户的行为和偏好,结合图数据库中的知识,模型可以为用户提供个性化的推荐。:通过图数据库存储和检索结构化的知识,为语言模型提供丰富的背景信息,提升生成内容的质量和准确性。:选择合适的图数据库,如Neo4j、OrientDB等,以支持高效的图数据存储和检索。:利用图数据库的高效检索能力,快速找到与用户查询最相关的图元素,提高系统的响应速度。

加入“Super Entity”,与全能开发团队共探AI智能体与数字人项目,开启前沿技术之旅。 1593

mybatis系列----启动流程

mybatis系列–1–启动流程 文章目录`mybatis`系列--`1`--启动流程1 前言2 原生`jdbc`3 `mybatis`的简单用法4 启动流程4.1 `SqlSessionFactoryBuilder().build(inputStream)`4.1.1 `configurationElement(parser.evalNode("/mapper"))`4.1.2 `bindMapperForNamespace()`4.2 `sqlSessionFactory.openSession()

qq_33012981的博客 1103

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

SpringBoot 集成 Mybatis 启动流程与原理

最近一直处于疯狂读源码的状态,简直就是少壮不努力,老大徒伤悲。言归正传,虽然所在的公司用的框架都是内部的,基于开源的框架封装的,但是平时自己写东西的时候,还是喜欢直接用开源的框架。在大学的时候就用过SpringBoot,工作以后也用过Mybatis,但是会用却不是很了解原理。最近就很好奇,SpringBoot的项目通过starter的形式集成Mybatis后,启动的流程与原理,于是就...

qq_20614905的博客 4679

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

【MyBatis系列6】想要学会MyBatis,看完这一篇就够了

深入剖析SqlSession前言SqlSession总结 前言 作为MyBatis四大对象之一的SqlSession,可以说是最复杂的对象了,SqlSession就是用来真正执行sql语句的对象,执行一条sql语句,两个关键点就是JavaBean参数要和数据库字段映射,返回结果也要实现数据库字段和JavaBean的映射,那么SqlSession是如何做到这一切的呢? 请往下看。。。 本文将带您揭开SqlSession的神秘面纱。 SqlSession 总结 本文主要分析了MyBatis中的四大核心对象:Sq

zwx900102的博客 7233

NTscan扫描工具

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

MyBatis 核心架构与启动流程剖析:从配置到初始化的深度解析

本文以MyBatis的demo项目为例,剖析其核心架构与启动流程。核心架构分为配置层、会话层、执行层和数据层,通过分层设计实现数据库操作解耦。启动流程包含配置加载、核心类初始化和会话工厂构建三个阶段。文章详细解析了XMLConfigBuilder.parse()方法如何将配置文件转换为Configuration对象,包括解析properties、settings、typeAliases等节点,最终构建SqlSessionFactory。示例代码展示了用户表操作的基本实现,包括User实体类、Mapper接口

qq_45464560的博客 1160

【MyBatis 源码解析】MyBatis启动流程源码分析

看完视频之后自己去 debug 的源码,纯个人理解,仅供参考

qq_55477069的博客 518
上一篇: 5)Mybatis中Mapper文件和Java接口之间映射实现
下一篇: Cat监控原理分析
jaemy2011
博客等级 码龄11年 1粉丝 60原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值