文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

使用mybatisplus接收mysql字段为json类型的数据

2023-08-31 15:57

关注

一.数据库设计

CREATE TABLE `inv_learning_examination_questions`  (  `id` bigint(20) NOT NULL,  `title` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '题目',  `options` json NULL COMMENT '选项',  `standard_answer` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '标准答案',  `answer_analysis` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '答案解析',  `open_range` tinyint(4) NULL DEFAULT NULL COMMENT '开放范围',  `business_area` tinyint(4) NULL DEFAULT NULL COMMENT '业务领域',  `difficulty_level` tinyint(4) NULL DEFAULT NULL COMMENT '难度等级',  `topic_type` tinyint(4) NULL DEFAULT NULL COMMENT '选题类型',  `views` int(11) NULL DEFAULT NULL COMMENT '浏览量',  `collect` int(11) NULL DEFAULT NULL COMMENT '收藏量',  `status` tinyint(4) NULL DEFAULT NULL COMMENT '发布状态',  `release_time` datetime(0) NULL DEFAULT NULL COMMENT '发布时间'  PRIMARY KEY (`id`) USING BTREE) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic;

二.实体类(切记实体类@TableName一定要加上autoResultMap = true属性,否则查不出来该属性的值)

package com.innovation.desk.domain;import com.baomidou.mybatisplus.annotation.TableField;import com.baomidou.mybatisplus.annotation.TableName;import com.baomidou.mybatisplus.extension.handlers.FastjsonTypeHandler;import com.fasterxml.jackson.annotation.JsonFormat;import com.innovation.common.base.BaseLLEntity;import com.innovation.common.utils.DateUtil;import com.innovation.desk.handler.OptionHandler;import lombok.Data;import lombok.EqualsAndHashCode;import io.swagger.annotations.ApiModel;import io.swagger.annotations.ApiModelProperty;import org.springframework.format.annotation.DateTimeFormat;import java.util.Date;import java.util.List;@Data@TableName(value = "inv_learning_examination_questions",autoResultMap = true)@EqualsAndHashCode(callSuper = true)@ApiModel(value = "LearningExaminationQuestions对象", description = "LearningExaminationQuestions对象")public class LearningExaminationQuestions extends BaseLLEntity {    private static final long serialVersionUID = 1L;    @ApiModelProperty(value = "题目")    private String title;    @TableField(typeHandler = OptionHandler.class)    @ApiModelProperty(value = "选项")    private List

1.如果接收参数是实体类或List,可以直接使用mybatisplus自带的解析处理器即可,例如在属性上添加

@TableField(typeHandler = FastjsonTypeHandler.class)

此处FastjsonTypeHandler有多个类型可供选择:比如AbstractJsonTypeHandler,AbstractSqlParserHandler,FastjsonTypeHandler,GsonTypeHandler,JacksonTypeHandler,MybatisEnumTypeHandler

2.如果接收参数是个List<实体类>,这里需要注意:以上提供的解析器不能提供完全解析,这里你需要自定义解析器做定制化解析,以下是解析器的源码

原因:type属性被注入进来的只是List的字节码文件,通过parse方法只能将json转化为List对象,而JsonObject不能强转为相应的实体类,所以在获取到解析后的对象遍历的时候会报类型转换错误异常,这时可以重写此handler的parse方法来实现自己的目的,以下是将json转化为List

public class OptionHandler extends FastjsonTypeHandler {    public OptionHandler(Class type) {        super(type);    }    @Override    protected Object parse(String json) {        return JSON.parseArray(json, Option.class);    }    @Override    protected String toJson(Object obj) {        return super.toJson(obj);    }}

 添加完成后只需在实体类的对应属性上添加注解

@TableField(typeHandler = OptionHandler.class)即可实现解析

如果使用了xml文件可参考以下方式

来源地址:https://blog.csdn.net/qq_41514643/article/details/129441803

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     801人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     348人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     311人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     432人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     220人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-数据库
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯