mybatis plus 查询部分源码分析,typehandler怎么实现的?FastjsonTypehandler 查询问题怎么解决?

news2024/9/22 9:44:32

我们在使用mysql的json字段的时候有时为了方便,最好是查询的时候直接反序列化为对象比较好,这时候我们就用到了typehandler这个属性

首先mybatis plus 会初始化一系列的 typeHandler,并且扫描用户设置的typeHandler路径(mybatis-plus: type-handlers-package: //路径),把用户自定义的typeHandler一并初始化到 typeHandlerMap

执行查询的时候,会先处理参数,获取所传参数的typehandler,然后setparameter之类的,处理完之后会执行 baseExecutor的doquery方法

当设置 @TableName(autoResultMap = true) 时,会自动根据类型以及对应的注解去匹配,而不需要手动匹配。开始的时候就会把所有的mapper的对应的放进mappedStatements里

在doquery前就把resultMapping设置好

key为对应的我们对应的mapper里对应的方法

在mybatis解析的时候会从根据当前的方法去获取对应的映射的statement 

如selectById 这里会走到selectList,再根据我们当前的statement去从配置中获取到映射好的MappedStatement

在这个MappedStatement中,我们就可以发现,typehandler已经配置好了的

当不设置 @TableName(autoResultMap = true)时,查询的时候执行getJdbcHandlerMap方法,尝试根据字段的类型,手动从map中获取handler,把每个字段都配置上对应的handler,如果没找到handler则不处理结果也就是返回null

然后我们再把注解去掉,同样走到这里:

我们发现这里的resultMapping是空的,也就是没有自动装配,所以没有注解是到后面才做的匹配映射

所以最好的方式就是用官方推荐的: autoResultMap = true 必传。通过注解可以灵活处理

当然,我们使用自己在mapper中写的方法时,是不走自动映射的,这时候我们需要自定resultMap,把需要的的字段定义上typeHandler

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

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

相关文章

Flutter-->AAPT: error: resource android:attr/lStar not found.

更新Flutter 3.24.0之后, 打包出现AAPT: error: resource android:attr/lStar not found.问题, 这里出一个我的解决方案. 更新Flutter 3.24.0之后, Android编译sdk需要使用34, 否则就会出现很多问题… 由于很多库都不可能及时更新适配到Android sdk 34, 所以可以等pub get将子…

硅谷物理服务器有哪些关键优势和特点

硅谷的物理服务器设施全球知名,为各类企业提供了卓越的IT基础设施支持。下面将逐一探讨硅谷物理服务器的关键优势和特点,rak小编为您整理发布硅谷物理服务器有哪些关键优势和特点。 1. 卓越的性能 高性能计算能力:硅谷的物理服务器采用最新一…

Authentik:开源身份提供商

Authentik 是一个开源身份提供商,旨在实现最大的灵活性和适应性。 它可轻松集成到现有环境中并支持新协议。 它是一个全面的解决方案,用于在您的应用程序中实现注册、帐户恢复等功能,无需手动管理这些任务。 Authentik 可以无缝集成到现有…

arcgis打开不同tif格式编码的栅格数据

1、如下图,将文件包包解压打开,看到【2020年GDP数据】。 2、点击进入【2020年GDP数据】文件夹如下图所示。接着去打开arcgis软件。 3、按照步骤来,在arcgis【目录】里面添加【文件夹】然后选中你刚刚解压的【GDP文件夹数据】,最…

21 注意力机制—自注意力

目录 1.自注意力和位置编码跟CNN,RNN对比位置编码(position encoding)1、和 CNN / RNN 不同,自注意力并没有记录位置信息2、为了使用序列的顺序信息,通过在输入表示中添加位置编码将位置信息注入到输入里3、P 的元素具体计算如下:位置编码矩阵绝对位置信息相对位置信息总…

Linux运维篇-yum命令报错 /lib64/libcurl.so.4相关

目录 项目场景:问题描述原因分析:解决方案: 项目场景: centos7,8,同样也适用openEuer,Kylin等redhat系的国产化操作系统 问题描述 在使用yum命令时报错: 主要报错信息为&#xff1…

诈骗未成功是否构成犯罪?

诈骗未成功不一定构成犯罪。在刑法上,构成诈骗罪需要满足特定的构成要件,包括有非法占有的目的、实施了虚构事实或隐瞒真相的行为、对方因此陷入错误认识并处分财产、行为人或第三方取得财产、被害人遭受财产损失。如果诈骗行为未能成功,即被…

[C#]基于winform结合photocartoon算法实现人物卡通化源码实现

【官方框架】 https://github.com/minivision-ai/photo2cartoon 简介 人像卡通风格渲染的目标是,在保持原图像ID信息和纹理细节的同时,将真实照片转换为卡通风格的非真实感图像。我们的思路是,从大量照片/卡通数据中习得照片到卡通画的映射…

HDRP管线下的开放世界游戏与跨平台优化,《仙剑世界》万字分享

《仙剑世界》作为仙剑 IP 系列的最新⻓篇⼒作,从故事和剧情上延续了仙剑的精髓。在仙剑 33 年的世界观下,《仙剑世界》打造出了⼀个由浪漫唯美的江南全景、磅礴恢弘的蜀⼭、神秘苗疆等区域构成的 384 平⽅公⾥完整的⽆缝开放⼤世界。以东⽅题材为起点&am…

Java入门-接口:JDK8开始接口新增方法,接口的多继承,接口注意事项

(一)新增接口注意事项: 接口A: package interface_jdk8;public interface A {//1.新增默认方法:必须使用defalut修饰,默认会被public修饰//注意:这种默认方法可以带方法体/*实例方法&#xff1…

openssh升级到9.8

升级步骤 1、查看版本 [rootlocalhost openssh-8.8p1]# ssh -V OpenSSH_8.8p1, OpenSSL 1.0.2k-fips 26 Jan 20172、下载安装包 cd /usr/local/src wget https://www.zlib.net/zlib-1.3.1.tar.gz wget https://www.openssl.org/source/openssl-3.2.1.tar.gz wget https://cdn.…

在小程序添加公司官网访问

在小程序添加公司官网访问 有时候由于业务需要,在小程序上加入自己公司官网的访问地址,点击后跳转到官网。 本文详细讲解整个过程。 一、小程序管理台配置 进入小程序管理台 开发管理-》业务域名 加入你的公司官网域名,具体如下图所示&…

2024新型数字政府综合解决方案(八)

新型数字政府综合解决方案结合人工智能、大数据、区块链与云计算等先进技术,旨在构建一个智能、高效、透明的政务服务体系,通过全面整合各部门的信息资源,实现数据的实时共享与高效管理,从而大幅提升政府应对复杂社会问题的能力&a…

LookupError: Resource averaged_perceptron_tagger not found.解决方案

大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。喜欢通过博客创作的方式对所学的…

如何选择较为安全的第三方依赖版本?

如何选择较为安全的第三方依赖版本? 本文概览1.1 前言1.1.1 学会看第三方开源库的版本发布说明1.1.2 尽可能使用 starer 匹配的第三方开源库1.1.3 参考Maven 中心仓库的安全警告信息 本文概览 本篇博文分享如何选择较为安全的第三方依赖版本的方法。 1.1 前言 众…

学习Flutter时需要了解的背景知识

关键词:Flutter、移动UI框架、跨平台、Widget、高效开发、自定义Widget、热重载、性能优化 摘要:Flutter是Google推出的开源移动UI框架,旨在支持高效构建高质量的原生应用,同时兼容iOS和Android平台。它通过热重载技术实现高效开发…

【机器人学】7-1.六自由度机器人自干涉检测-总体算法介绍

目录 前言 机器人自干涉检测方法 一 机械臂各连杆等效 二 确定一个圆柱体 三 圆柱体的空间变换 四 空间几何分析 五 关键点总结 前言 机器人在运行过程中,可能发生碰撞,碰撞物可以是外界物体,也可以是机器人自己的关节间发生碰撞…

Docker部署Eclipse Mosquitto开源MQTT的消息代理环境步骤(实践)

1.前言 Eclipse Mosquitto是一个开源(EPL/EDL许可)的消息代理,实现了MQTT协议的版本5.0、3.1.1和3.1。Mosquitto是轻量级的,适用于从低功耗单板计算机到完整服务器的所有设备。 MQTT协议提供了一种轻量级的消息传输方法&#xf…

渗透测试-行业术语

1.肉鸡 肉鸡用来比喻哪些可以随意被我们控制的计算机,可以是普通的个人电脑,也可以是大型服务器或者其他网络设备,我们可以像操作自己的电脑一样操作他们而不被发觉。 2.木马 表面上伪装成了正常程序,但是当程序被运行的时候&a…

【gitlab】gitlab-ce:17.3.0-ce.0 1:使用docker engine安装

ce版本必须配置代理。 极狐版本可以直接pull 社区版GitLab不支持Alibaba Cloud Linux 3,本操作以Ubuntu/Debian系统为例进行说明,其他操作系统安装说明,请参见安装社区版GitLab。 docker 环境重启 sudo systemctl daemon-reload sudo systemctl restart docker脚本安装 安裝…