news 2026/4/18 11:50:09

java 实体属性 Map 解决 mybatis-plus wrapper selectone 查mysql json类型为null 问题

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
java 实体属性 Map 解决 mybatis-plus wrapper selectone 查mysql json类型为null 问题

mysql 有个字段是json类型

`content_map`json DEFAULT NULL COMMENT'个性化配置内容(LAN3/BGP等)',

java 实体属性

/** * 个性化配置内容(JSON存储,包含LAN3/BGP等) */ @TableField(value="content_map", typeHandler=com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler.class)private Map<String, Object>contentMap;

mybatis-plus 使用wrapper

LambdaQueryWrapper<xxxx>queryWrapper=new LambdaQueryWrapper<>();queryWrapper.eq(xxx::getId,id).eq(xxx::getStoreCode, storeCode);//2. 查询现有记录 xxxxx=xxx.getOne(queryWrapper);

但是问题是:content_map 查不到数据,用原生的mybatis 可以正常使用
原因:
MyBatis-Plus 的 JacksonTypeHandler(以及大多数自定义 TypeHandler)默认是按字符串(String)来处理 JSON 的。
但 MySQL 的 JSON 类型在 JDBC 驱动中返回的是 java.sql.SQLJSON 对象(或内部以二进制/特殊格式存储),不是 String!
JDBC 返回 SQLJSON,JacksonTypeHandler 调 getString() 可能失败 → 改用 TEXT

AI和 网上建议加上

@MappedJdbcTypes(JdbcType.OTHER)// MySQL JSON 类型映射为 JdbcType.OTHER @MappedTypes(Map.class)public class MySqlJsonTypeHandler extends BaseTypeHandler<Map<String, Object>>{

改xml文件

<resultproperty="contentMap"column="content_map"typeHandler="com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler"/>

都没有生效

为什么?
因为wrapper 无法利用 MyBatis-Plus 的 JacksonTypeHandler 自动映射
如果你用 String 类型,即使加了 @TableField(typeHandler = JacksonTypeHandler.class),它也会尝试把 Java 对象序列化成 JSON 字符串,但目标字段是 String,可能导致类型不匹配或异常。

解决方案:

@TableName(value="xxx",autoResultMap=true)

让 MP 自动生成带 typeHandler 的 resultMap

@TableName(autoResultMap = true) 是 MyBatis-Plus(MP) 提供的一个非常关键的注解属性,用于自动为实体类生成内联的 resultMap,从而支持如 typeHandler、association、collection 等复杂映射功能。

后面可以试一下这样

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/18 3:58:34

鸿蒙应用的自动化测试与持续集成实战:智能待办的质量保障

&#x1f680; 鸿蒙应用的自动化测试与持续集成实战&#xff1a;智能待办的质量保障 一、章节概述 ✅ 学习目标 掌握鸿蒙自动化测试框架&#xff08;方舟测试框架/DevEco Test/第三方工具&#xff09;的核心原理落地《全生态智能待办》的自动化测试方案&#xff1a;单元测试/UI…

作者头像 李华
网站建设 2026/4/18 3:25:03

车牌识别系统界面](https://fakeimg.pl/600x400/ff0000/000?text=LabVIEW+车牌识别

基于labview的车牌识别系统&#xff0c;实现对车牌位置识别和数字识别&#xff0c;程序为虚拟资料&#xff08;假装这里有张LabVIEW程序前面板的截图&#xff0c;左边是原始图像&#xff0c;右边实时显示定位框和识别结果&#xff09;最近在LabVIEW里折腾车牌识别挺有意思的——…

作者头像 李华
网站建设 2026/4/18 3:25:01

导师推荐!专科生必备!10款一键生成论文工具TOP10测评

导师推荐&#xff01;专科生必备&#xff01;10款一键生成论文工具TOP10测评 2026年专科生论文写作工具测评&#xff1a;为什么你需要这份榜单&#xff1f; 随着高校教育的不断深化&#xff0c;专科生在学术写作方面的需求也日益增长。然而&#xff0c;面对繁重的课程任务与论文…

作者头像 李华
网站建设 2026/4/18 3:27:39

新手必看:JavaScript堆内存问题入门指南

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 创建一个交互式学习工具&#xff0c;通过简单的示例和逐步引导&#xff0c;帮助初学者理解JavaScript堆内存分配失败的常见原因&#xff08;如内存泄漏、大对象分配等&#xff09;…

作者头像 李华
网站建设 2026/4/18 3:30:20

Neo4j图数据库学习(二)——SpringBoot整合Neo4j

一. 前言 本文介绍如何通过SpringBoot整合Neo4j的方式&#xff0c;对图数据库进行简单的操作。 Neo4j和SpringBoot的知识不再赘述。关于Neo4j的基础知识&#xff0c;有兴趣可以看看作者上一篇的文章&#xff1a;Neo4j图数据库学习(一)——初识CQL 二. 前置准备 新建SpringBo…

作者头像 李华