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

mysql 有个字段是json类型

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

java 实体属性

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

mybatis-plus 使用wrapper

bash 复制代码
        LambdaQueryWrapper<xxxx> queryWrapper = new LambdaQueryWrapper<>();
        queryWrapper.eq(xxx::getId, id)
                .eq(xxx::getStoreCode, storeCode);

        // 2. 查询现有记录
       xxx xx= 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和 网上建议加上

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

改xml文件

bash 复制代码
   <result property="contentMap" column="content_map"
            typeHandler="com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler"/>

都没有生效

为什么?

因为wrapper 无法利用 MyBatis-Plus 的 JacksonTypeHandler 自动映射

如果你用 String 类型,即使加了 @TableField(typeHandler = JacksonTypeHandler.class),它也会尝试把 Java 对象序列化成 JSON 字符串,但目标字段是 String,可能导致类型不匹配或异常。

解决方案:

bash 复制代码
@TableName(value= "xxx",autoResultMap = true)

让 MP 自动生成带 typeHandler 的 resultMap

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

后面可以试一下这样

相关推荐
蛋蛋的就会顺顺的5 小时前
hot100 p0——栈,贪心算法,动态规划
java·前端·javascript·算法·leetcode·力扣
mister_guo6 小时前
MySQL-1267错误:排序规则冲突的原因与解决方案
数据库·mysql
需要8266 小时前
Spring Bean 生命周期:从实例化到销毁的完整钩子
java·后端·spring
小 黄 鸡6 小时前
HashMap 面试必会知识点详解(JDK 8)
java·面试·职场和发展
Lost_the_wind8 小时前
MySQL学习笔记五
mysql
伯恩bourne8 小时前
Spring Boot Bean 注册的两种方式:@Component 家族 vs @Configuration + @Bean
java·spring boot·后端
silvamux_8 小时前
curl 测试 OpenAI 兼容 API 的完整流程
java·人工智能·缓存·ai·oneapi
省钱兄--zs9 小时前
深圳24小时自助健身房软硬件解决方案实战指南与开发流程详解
java·数据仓库·spring boot·小程序·架构
顽疲9 小时前
Java vue 养老系统源码详解:月账单 care_month_bill 与 Quartz 扣费 Job 实践
java·开发语言·vue.js·vue养老·springboot养老·java养老
Wang's Blog9 小时前
Java 项目实战: 交友项目 - 安装开发工具与环境准备
java·开发语言·交友