当前位置: 首页 > news >正文

mybatis配置entity下不同文件夹同类型名称的多个类型时启动springboot项目出现TypeException源码分析

记录问题:当配置了 mybatis.type-aliases-package=com.runjing.erp.entity 配置项时,如果entity文件夹下存在不同子文件夹下的同名类型时,mybatis初始化加载映射时会爆出org.apache.ibatis.type.TypeException: The alias 'TestDemo' is already mapped to the value'TestDemo全限定文件路径’ 异常。

问题原因猜测:mybatis加载entity包下的实体类时,会扫描与其转换为非驼峰名称的数据库数据表,当同时出现多个同名称的类型时,别名加载异常,可能维护了一个存储别名的数据结构,如果别名恰巧就是以类型的简单名称为准,就容易导致其他同名的类型别名无法加载完成,爆出异常。

失败措施:起初以为时名称Test与mybatis内置的某个注解或者配置同名异常,全部将名称改为TestDemo后仍然报错。

分析mybatis相关源码:

异常语句打印源码地址:

image.png

image.png

以上代码可以看出在mybatis加载类型别名时,会自动调用别名注册方法,同时存储别名的数据结构是一个Map<String,Class<?>>的map,那么map内部插入一个key相同的键值对是一定不行的。

image.png

我们可发现这里校验了是否已经加载过这个类型,如果加载过,别名存储的数据结构中一定有对应的键值对,那么就会爆出这个异常。

那么mybatis是怎么加载实体类型与对应的别名注册的呢?

我们直接从spring boot对于mybatis的自动配置类上下手:

image.png

经过以上的条件验证后,利用SqlSessionFactoryBean创建一个SqlSessionFactory会话工厂。

image.png

初始加载时,会话工厂应当是空的,所有走向了这个Bean的所谓属性设置后的生命周期方法内部:

image.png

这里也是进行一些数据源,数据会话工厂构造器,数据源配置的相关验证,那么直接进入它构造会话工厂的方法内部:

image.png

方法过于的长,经过我的查看,里面包含有加载数据源、数据库、类型别名、映射Mapper文件、配置文件的代码。与我们这个问题相关的是以上圈起来的代码:

typeAliasesPackage 类型别名包,明显是mybatis配置过的加载实体类型的包路径数据。(注意我们自己在配置文件配置过此类信息

mybatis.type-aliases-package=com.runjing.erp.entity

拿到根路径后自然就是循环遍历里头的各级文件夹,扫描类型别名注册:

configuration.getTypeAliasRegistry().registerAliases(packageToScan,

                typeAliasesSuperType == null ? Object.class : typeAliasesSuperType);

那么我们进入到这个方法的源码里查看下去:

image.png

注册类型别名的方法,继续跟踪:

image.png

扫描有没有使用mybatis的别名注解,如果没有继续调用注册方法,我没用,跟踪下去:

image.png

那么这里显然就是我们出现异常的原因点,问题结束。

相关文章:

mybatis配置entity下不同文件夹同类型名称的多个类型时启动springboot项目出现TypeException源码分析

记录问题&#xff1a;当配置了 mybatis.type-aliases-packagecom.runjing.erp.entity 配置项时&#xff0c;如果entity文件夹下存在不同子文件夹下的同名类型时&#xff0c;mybatis初始化加载映射时会爆出org.apache.ibatis.type.TypeException&#xff1a; The alias TestDemo…...

淘宝商品评论数据分析接口,淘宝商品评论接口

淘宝商品评论数据分析接口可以通过淘宝开放平台API获取。 通过构建合理的请求URL&#xff0c;可以向淘宝服务器发起HTTP请求&#xff0c;获取商品评论数据。接口返回的数据一般为JSON格式&#xff0c;包含了商品的各种评价信息。 获取到商品评论数据后&#xff0c;可以对其进…...

RK3288 android7.1 修改双屏异触usb tp触摸方向

一&#xff0c;问题描述&#xff1a; android机器要求接两个屏&#xff08;lvdsmipi&#xff09;两个usb tp要实现双屏异触。由于mipi的方向和lvds方向转成一样的了。两个usb tp的方向在异显示的时候也要作用一样。这个时候要根据pid和vid修改触摸上报的数据。usb tp有通用的触…...

软考 系统架构设计师系列知识点之软件架构风格(8)

接前一篇文章&#xff1a;软考 系统架构设计师系列知识点之软件架构风格&#xff08;7&#xff09; 这个十一注定是一个不能放松、保持“紧”的十一。由于报名了全国计算机技术与软件专业技术资格&#xff08;水平&#xff09;考试&#xff0c;11月4号就要考试&#xff0c;因此…...

ubuntu安装ssh

安装 OpenSSH 服务器&#xff08;如果尚未安装&#xff09;&#xff1a; apt-get update && apt-get upgrade -y sudo apt-get install -y openssh-server 检查 SSH 服务是否正在运行&#xff1a; sudo service ssh status 如果 SSH 服务未运行&#xff0c;请通过以…...

webpack不同环境下使用CSS分离插件mini-css-extract-plugin

1.背景描述 使用mini-css-extract-plugin插件来打包css文件&#xff08;从css文件中提取css代码到单独的文件中&#xff0c;对css代码进行代码压缩等&#xff09;。 本次采用三个配置文件&#xff1a; 公共配置文件&#xff1a;webpack.common.jsdev开发环境配置文件&#x…...

[MongoDB]-权限验证管理

[MongoDB]-权限验证管理 senge | 2023年9月 背景说明&#xff1a;现有两套MongoDB副本集群给开发人员使用时未开启认证。 产生影响&#xff1a;用户若输入账号以及密码则会进行校验&#xff0c;但用户可以在不输入用户名和密码的情况下也可直接登录。 倘若黑客借此进行攻击勒索…...

bootstrapjs开发环境搭建

Bootstrapjs是一个web前端页面应用开发框架&#xff0c;其提供功能丰富的JavaScript工具集以及用户界面元素或组件的样式集&#xff0c;本文主要描述bootstrapjs的开发环境搭建。 如上所示&#xff0c;使用nodejs运行时环境、使用npm包管理工具、使用npm初始化一个项目工程test…...

远程实时监控管理:5G物联网技术助力配电站管理

配电站远程监控管理系统是基于物联网和大数据处理等技术的一种创新解决方案。该系统通过实时监测和巡检配电场所设备的状态、环境情况、安防情况以及火灾消防等信息&#xff0c;实现对配电站的在线实时监控与现场设备数据采集。 配电站远程监控管理系统通过回传数据进行数据系…...

ubuntu 23.04安装中文输入法

使用ubuntu 23.04安装中文输入法&#xff0c;尝试了最新的搜狗&#xff0c;谷歌拼音&#xff0c;fcitx的原始拼音&#xff0c;最终的结果就是使用了谷歌拼音。 搜狗输入法&#xff1a;好用&#xff0c;但是用了没几天发现各种闪退&#xff0c;一打开就闪烁&#xff0c;根本无法…...

java:解析json的几种方式

Java是一种流行的编程语言&#xff0c;它提供了很多实用的库和工具&#xff0c;在处理JSON数据时也不例外。在本文中&#xff0c;我们将介绍Java中如何解析JSON数据。 JSON是一种轻量级的数据交换格式&#xff0c;它已经成为Web应用程序中最流行的数据格式之一。Java提供了许多…...

pytorch_神经网络构建1

文章目录 pytorch简介神经网络基础分类问题分析:逻辑回归模型逻辑回归实现多层神经网络多层网络搭建保存模型 pytorch简介 为什么神经网络要自定义数据类型torch.tensor? tensor可以放在gpu上训练,支持自动求导,方便快速训练,同时支持numpy的运算,是加强版,numpy不支持这些 为…...

Android 多线程并发详解

一&#xff0c;基础概念 1.1什么是CPU 中央处理器&#xff08;CPU&#xff09;&#xff0c;是电子计算机的主要设备之一&#xff0c;电脑中的核心配件。其功能主要是解释计算机指令以及处理计算机软件中的数据。CPU是计算机中负责读取指令&#xff0c;对指令译码并执行指令的…...

系统架构设计:8 论软件架构风格

目录 一 软件架构风格 1 数据流风格 (1)批处理风格 (2)管道-过滤器风格...

[Elasticsearch] 邻近匹配 (一) - 短语匹配以及slop参数

本文翻译自Elasticsearch官方指南的Proximity Matching一章。 邻近匹配(Proximity Matching) 使用了TF/IDF的标准全文搜索将文档&#xff0c;或者至少文档中的每个字段&#xff0c;视作"一大袋的单词"(Big bag of Words)。match查询能够告诉我们这个袋子中是否包含了…...

Bootstrap中让元素尽可能往父容器的左侧靠近或右侧造近(左浮动和右浮动)

在Bootstrap中&#xff0c;float-left是一个用于浮动元素的CSS类。它的作用是将一个元素向左浮动&#xff0c;使其在父容器内尽可能靠近左侧边缘&#xff0c;同时允许其他元素在其右侧排列。 使用float-left类可以创建多列布局&#xff0c;将元素水平排列在一行上&#xff0c;…...

网络流量安全分析-工作组异常

在网络中&#xff0c;工作组异常分析具有重要意义。以下是网络中工作组异常分析的几个关键点&#xff1a; 检测网络攻击&#xff1a;网络中的工作组异常可能是由恶意活动引起的&#xff0c;如网络攻击、病毒感染、黑客入侵等。通过对工作组异常的监控和分析&#xff0c;可以快…...

Flink之Watermark源码解析

1. WaterMark源码分析 在Flink官网中介绍watermark和数据是异步处理的,通过分析源码得知这个说法不够准确或者说不够详细,这个异步处理要分为两种情况: watermark源头watermark下游 这两种情况的处理方式并不相同,在watermark的源头确实是异步处理的,但是在下游只是做的判断,这…...

基于支持向量机SVM和MLP多层感知神经网络的数据预测matlab仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 一、支持向量机&#xff08;SVM&#xff09; 二、多层感知器&#xff08;MLP&#xff09; 5.算法完整程序工程 1.算法运行效果图预览 2.算法运行软件版本 matlab2022a 3.部分核心程序 .…...

【微服务】RedisSearch 使用详解

目录 一、RedisJson介绍 1.1 RedisJson是什么 1.2 RedisJson特点 1.3 RedisJson使用场景 1.3.1 数据结构化存储 1.3.2 实时数据分析 1.3.3 事件存储和分析 1.3.4 文档存储和检索 二、当前使用中的问题 2.1 刚性数据库模式限制了敏捷性 2.2 基于磁盘的文档存储导致瓶…...

5分钟快速部署:如何将手机摄像头变为电脑摄像头终极指南

5分钟快速部署&#xff1a;如何将手机摄像头变为电脑摄像头终极指南 【免费下载链接】droidcam GNU/Linux/nix client for DroidCam 项目地址: https://gitcode.com/gh_mirrors/dr/droidcam 想让闲置的安卓手机变身高清电脑摄像头吗&#xff1f;DroidCam正是你需要的免费…...

Z-Image Turbo在工业设计中的应用:产品概念图生成

Z-Image Turbo在工业设计中的应用&#xff1a;产品概念图生成 1. 引言 工业设计师的日常工作中&#xff0c;最耗时但又最关键的环节是什么&#xff1f;答案往往是概念图的创作和渲染。传统的工作流程中&#xff0c;设计师需要先手绘草图&#xff0c;然后在专业软件中建模、渲…...

防晒霜真的防晒吗?揭秘SPF值背后的“光“标准

盛夏将至&#xff0c;防晒霜成为每个人的随身必备。你是否想过&#xff1a;瓶身上标注的 SPF 50、PA 是如何测出来的&#xff1f;为什么有些防晒霜涂了还是会晒黑&#xff1f;所谓的"防水防汗"真的有科学依据吗&#xff1f;这些问题的答案&#xff0c;都藏在一个精密…...

Phi-3-mini-4k-instruct-gguf惊艳生成效果:5类中文任务(问答/改写/总结/建议/介绍)实测

Phi-3-mini-4k-instruct-gguf惊艳生成效果&#xff1a;5类中文任务实测 1. 模型介绍与测试背景 Phi-3-mini-4k-instruct-gguf是微软Phi-3系列中的轻量级文本生成模型GGUF版本。这个模型特别适合处理中文的问答、文本改写、摘要整理和简短创作等任务。相比大型语言模型&#x…...

word简历模板(含范文),免费下载

word简历模板导言 在竞争激烈的求职市场中&#xff0c;一份专业、个性化的简历是叩开理想企业大门的关键。简历不仅是个人经历的罗列&#xff0c;更是能力、潜力与职业规划的集中体现。然而&#xff0c;许多求职者因缺乏经验或模板参考&#xff0c;难以突出自身优势&#xff0…...

如何使用hello-uniapp性能监控工具实时掌握应用运行状态

如何使用hello-uniapp性能监控工具实时掌握应用运行状态 【免费下载链接】hello-uniapp uni-app框架演示示例 项目地址: https://gitcode.com/gh_mirrors/he/hello-uniapp hello-uniapp性能监控工具是uni-app框架演示示例中的核心功能模块&#xff0c;它提供了一套完整的…...

状态机中的人物状态

一&#xff0c;人物惯性移动using System.Collections; using System.Collections.Generic; using UnityEngine;public class CharMove3 : MonoBehaviour {public Transform charTrans; //角色坐标public Vector3 currentVelocity; //当前速度public float maxSpeed; //最大速率…...

STM32精准延时实现与Keil调试技巧

1. 精准延时在单片机开发中的重要性在STM32等嵌入式系统开发中&#xff0c;精准延时是基础但至关重要的功能。我最近调试一块自制的STM32开发板时&#xff0c;就遇到了需要精确控制时序的场景。比如在驱动LCD屏幕时&#xff0c;某些控制信号需要维持15ms的精确延时&#xff0c;…...

3个简单技巧让YOLO小目标检测精度提升50%:Ultralytics实战指南

3个简单技巧让YOLO小目标检测精度提升50%&#xff1a;Ultralytics实战指南 【免费下载链接】ultralytics Ultralytics YOLO &#x1f680; 项目地址: https://gitcode.com/GitHub_Trending/ul/ultralytics 你是否在为监控视频中远处行人检测不准而烦恼&#xff1f;工业质…...

从‘数值灾难’到平稳训练:深入浅出聊聊MoE中路由Z-loss的设计哲学

从‘数值灾难’到平稳训练&#xff1a;深入浅出聊聊MoE中路由Z-loss的设计哲学 想象一下&#xff0c;你正在指挥一个由数百名专家组成的交响乐团。每位音乐家都技艺精湛&#xff0c;但如果在演奏时某个乐器的音量突然爆表&#xff08;比如小号手过于兴奋&#xff09;&#xff…...