【Java】Mybatis查询数据库返回JSON格式的字段映射到实体类属性

这篇具有很好参考价值的文章主要介绍了【Java】Mybatis查询数据库返回JSON格式的字段映射到实体类属性。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

今天遇到了一个bug,大概就是数据库(Mysql)中有一个type类型字段,数据类型为json,大概是这样的:[“苹果”,“香蕉”,“葡萄”]的数据格式,这个bug的问题所在呢就是查询后这个json格式的数据无法映射到我们实体类的属性上,解决方案如下:

解决

实体类的配置:

import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler;

@TableField(typeHandler = JacksonTypeHandler.class)
private JSONArray type;

@TableField(typeHandler = JacksonTypeHandler.class)是MyBatis-Plus的注解,它用于指定Java实体类中对应的字段的类型处理器。在这个例子中,使用了JacksonTypeHandler来处理JSONArray类型的数据。

XML文件配置:

<resultMap id="defaultResultMap" type="xx.xx.model.User">
	<result property="type" column="type" typeHandler="com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler"/>
</resultMap>

在MyBatis-Plus中,typeHandler属性用于设置字段映射时的类型处理器。com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler是MyBatis-Plus提供的一个针对Jackson库的类型处理器,用于处理Java对象和JSON字符串的相互转换。在代码中,这个类型处理器被用于处理type字段,将JSON字符串转换成Java对象。

查询语句:

@Override
public User selectById(String id) {
	return userMapper.selectById(id);
}

注:如果你在上面的查询语句中使用的是在Mybatis的查询方式,并且返回的类型指定的是resultMap,那么下面的报错你就不用看了。

然后我们测试一下,你会发现,它™还是返回的null,数据库可以正常查出来数据,但在代码中字段就是映射不上,本以为是JacksonTypeHandler转换的时候出了问题,我在这里深陷了两个小时才找到问题原因。

解决方法

1 我们只需要在实体类中加上@TableName(value = "user", autoResultMap = true)后面的autoResultMap 即可。

2 或者可以使用@TableName(value = "user", resultMap= "xml文件中resultMap标签的id值")
:配置了typeHandler属性的映射字段需要在该标签里面

问题原因

@TableName 注解用于指定实体类对应的数据库表名,value 属性表示表名,autoResultMap 属性表示是否开启自动生成 resultMap,默认为 false,表示不开启。

当 autoResultMap 为 true 时,MyBatis-Plus 会在启动时自动根据表结构生成对应的 resultMap。如果没有指定 resultMap 或 resultType 属性,会使用自动生成的 resultMap 进行结果映射。

例如 ,使用 @TableName(value = “user”, autoResultMap = true) 注解标记一个实体类,表示该类对应的数据库表名为 user,并开启自动生成 resultMap。那么在执行查询时,如果该查询的返回值是该实体类的列表,那么 MyBatis-Plus 会自动使用自动生成的 resultMap 进行结果映射。

原因总结

总的问题原因就是,我们使用MP内置的查询方法返回是没有指定resultMap标签里的typeHandler转换的,所以在实体类中配置了转换只会在添加的时候有效果,查询的时候是映射不到的。

BUG总结

坑爹!再也不用plus了文章来源地址https://www.toymoban.com/news/detail-616248.html

到了这里,关于【Java】Mybatis查询数据库返回JSON格式的字段映射到实体类属性的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • MyBatis查询数据库

    1.定义 :         MyBatis是一款优秀的持久层框架,它支持自定义SQL、存储过程以及高级映射。         MyBatis去除了几乎所有的JDBC代码以及设置参数和获取结果集的工作。         MyBatis可以通过简单的XML或注解来配置和映射原始类型、接口和Java POJO (Plain Old Java

    2024年02月04日
    浏览(34)
  • MyBatis查询数据库(1)

    ❤️❤️❤️SSM专栏更新中,各位大佬觉得写得不错,支持一下,感谢了!❤️❤️❤️ Spring + Spring MVC + MyBatis_冷兮雪的博客-CSDN博客 经过前⾯的学习咱们 Spring 系列的基本操作已经实现的差不多了,接下来,咱们来学习更重要的知识,将前端传递的数据存储起来,或者查询

    2024年02月15日
    浏览(57)
  • MyBatis查询数据库(3)

    ❤️❤️❤️SSM专栏更新中,各位大佬觉得写得不错,支持一下,感谢了!❤️❤️❤️ Spring + Spring MVC + MyBatis_冷兮雪的博客-CSDN博客 前面我们讲解了MyBatis增删改查基本操作,下面我们来深入了解MyBatis其中不同和需要注意的地方。 下面我们来实现⼀下根据用户 id 查询用户

    2024年02月14日
    浏览(36)
  • MyBatis查询数据库(4)

    ❤️❤️❤️SSM专栏更新中,各位大佬觉得写得不错,支持一下,感谢了!❤️❤️❤️ Spring + Spring MVC + MyBatis_冷兮雪的博客-CSDN博客 终于到了MyBatis最后一篇,这篇讲的是 动态SQL的使用。 动态 SQL 是Mybatis的强大特性之⼀,能够完成不同条件下不同的 SQL 拼接。 可以参考官

    2024年02月14日
    浏览(34)
  • MyBatis查询数据库(2)

    目录 前言🍭 一、增删查改操作🍭 1、查🍉 Ⅰ、mapper接口:🍓 Ⅱ、UserMapper.xml 查询所有用户的具体实现 SQL:🍓 Ⅲ、进行单元测试🍓 2、增、删、改操作🍉 Ⅰ、增🍓 添加用户🍒 添加用户并且返回自增 id🍒 Ⅱ、改🍓 根据id修改用户名🍒 开启 MyBatis sql 日志打印🍒 Ⅲ、

    2024年02月16日
    浏览(34)
  • 关于数据库json 字段的查询

    1、查询json字符串中是否包含某个节点 2、查询json字符串中某个节点等于或者不等于某个值 需要注意的点json串和json数组匹配方式不同 json数组匹配  $[*].name  或者 $[0].name json串 $.name 这里发现一个总结的很好的博主,推荐一下 mysql中json_extract的使用方法_-王尚可-的博客-CSDN博

    2024年02月16日
    浏览(50)
  • MyBatis 查询数据库、持久层框架简介

    MyBatis是一款优秀的持久层框架,支持自定义SQL、存储过程以及高级映射。它通过简单的XML或注解来配置和映射原始类型、接口和Java POJO为数据库中的记录。

    2024年02月12日
    浏览(42)
  • MyBatis查询数据库之一(概念+创建项目+基础交互)

    目录 1.MyBatis是什么? 2.为什么学习MyBatis? 3. 怎么学 MyBatis 4.第⼀个MyBatis查询 4.1 添加MyBatis框架支持 4.1.1老项目添加MyBatis 4.1.2 新项目添加MyBatis 4.2 配置连接字符串和MyBatis 4.2.1 配置连接字符串 4.2.2 配置 MyBatis 中的 XML 路径 5. 使用 MyBatis 的操作模式操作数据库 5.1 添加实体类

    2024年02月13日
    浏览(36)
  • MyBatis 查询数据库之二(增、删、改、查操作)

    目录 1. 配置打印 MyBatis 执行的SQL 2. 查询操作 2.1 通过用户 ID 查询用户信息、查询所有用户信息 (1) Mapper 接口 (2)UserMapper.xml 查询所有用户的具体实现 SQL (3)进行单元测试 3. 增加操作 3.1 在 mapper(interface)里面添加增加方法的声明 3.2 在 XMl 中添加 标签和增加的 sql 代码 3.3 生成

    2024年02月14日
    浏览(35)
  • mybatis plus 查询数据库字段名自动添加下划线问题解决

    实体类和数据库中的字段名是一致的,但报错Unknown column \\\'dept_id\\\' in \\\'field list\\\',这是因为plus中的驼峰命名法,会自动添加下划线。 关闭驼峰式命名转换为下划线 在配置文件中加一个: 重新运行,就可以了! 报错信息如下: java.sql.SQLSyntaxErrorException: Unknown column \\\'dept_id\\\' in \\\'fi

    2024年02月07日
    浏览(31)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包