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 等复杂映射功能。

后面可以试一下这样

相关推荐
言慢行善20 小时前
sqlserver模糊查询问题
java·数据库·sqlserver
专吃海绵宝宝菠萝屋的派大星20 小时前
使用Dify对接自己开发的mcp
java·服务器·前端
大数据新鸟20 小时前
操作系统之虚拟内存
java·服务器·网络
Tong Z20 小时前
常见的限流算法和实现原理
java·开发语言
喵了几个咪20 小时前
如何在 Superset Docker 容器中安装 MySQL 驱动
mysql·docker·容器·superset
凭君语未可20 小时前
Java 中的实现类是什么
java·开发语言
He少年20 小时前
【基础知识、Skill、Rules和MCP案例介绍】
java·前端·python
克里斯蒂亚诺更新20 小时前
myeclipse的pojie
java·ide·myeclipse
迷藏49421 小时前
**eBPF实战进阶:从零构建网络流量监控与过滤系统**在现代云原生架构中,**网络可观测性**和**安全隔离**已成为
java·网络·python·云原生·架构
迷藏49421 小时前
**发散创新:基于Solid协议的Web3.0去中心化身份认证系统实战解析**在Web3.
java·python·web3·去中心化·区块链