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

 更新时间:2024年04月03日 09:37:23   作者:深蓝格调_  
这篇文章主要介绍了使用mybatisplus接收mysql字段为json类型的数据方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
(福利推荐:【腾讯云】服务器最新限时优惠活动,云服务器1核2G仅99元/年、2核4G仅768元/3年,立即抢购>>>:9i0i.cn/qcloud

(福利推荐:你还在原价购买阿里云服务器?现在阿里云0.8折限时抢购活动来啦!4核8G企业云服务器仅2998元/3年,立即抢购>>>:9i0i.cn/aliyun

一.数据库设计

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;
 
/**
 * LearningExaminationQuestions实体类
 *
 * @author admin
 * @since 2023/03/03
 */
@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<Option> options;
 
    @TableField(typeHandler = FastjsonTypeHandler.class)
    @ApiModelProperty(value = "标准答案")
    private List<String> standardAnswer;
 
    @ApiModelProperty(value = "答案解析")
    private String answerAnalysis;
 
    @ApiModelProperty(value = "开放范围")
    private Integer openRange;
 
    @ApiModelProperty(value = "业务领域")
    private Integer businessArea;
 
    @ApiModelProperty(value = "难度等级")
    private Integer difficultyLevel;
 
    @ApiModelProperty(value = "选题类型")
    private Integer topicType;
 
    @ApiModelProperty(value = "浏览量")
    private Integer views;
 
    @ApiModelProperty(value = "收藏量")
    private Integer collect;
 
    @ApiModelProperty(value = "发布状态 0.待发布 1.已发布")
    private Integer status;
 
    @ApiModelProperty(value = "发布状态 0.待发布 1.已发布")
    @DateTimeFormat(pattern = DateUtil.PATTERN_DATETIME)
    @JsonFormat(pattern = DateUtil.PATTERN_DATETIME, timezone = "GMT+8")
    private Date releaseTime;
}

1.如果接收参数是实体类或List<String>

可以直接使用mybatisplus自带的解析处理器即可

例如在属性上添加

@TableField(typeHandler = FastjsonTypeHandler.class)

此处FastjsonTypeHandler有多个类型可供选择:

比如AbstractJsonTypeHandler,AbstractSqlParserHandler,FastjsonTypeHandler,GsonTypeHandler,JacksonTypeHandler,MybatisEnumTypeHandler

2.如果接收参数是个List<实体类>

这里需要注意:

以上提供的解析器不能提供完全解析

这里你需要自定义解析器做定制化解析

以下是解析器的源码

原因:

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

/**
 *  自定义CardContent转换处理类
 * @author Administrator
 */
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文件可参考以下方式

<result column="options" property="options" jdbcType="VARCHAR"
                typeHandler="com.innovation.desk.handler.OptionHandler"/>

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持程序员之家。

相关文章

  • shiro多验证登录代码实例及问题解决

    shiro多验证登录代码实例及问题解决

    这篇文章主要介绍了shiro多验证登录代码实例及问题解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-12-12
  • java基本事件处理机制解析

    java基本事件处理机制解析

    这篇文章主要介绍了java基本事件处理机制解析,?Java事件处理机制是一种用于处理用户交互和系统事件的编程模型,它基于事件驱动的思想,通过监听和响应事件来实现程序的交互性和动态性,需要的朋友可以参考下
    2023-10-10
  • 详解在Spring-Boot中实现通用Auth认证的几种方式

    详解在Spring-Boot中实现通用Auth认证的几种方式

    这篇文章主要介绍了详解在Spring-Boot中实现通用Auth认证的几种方式,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-07-07
  • 基于Java实现QQ邮箱发送工具类

    基于Java实现QQ邮箱发送工具类

    我们在日常开发中,需要实现一个对邮箱的发送,今天就实现邮箱的发送工具类,只需要一些注册邮箱之后的配置即可,感兴趣的小伙伴可以了解下
    2023-12-12
  • Java基于命令模式实现邮局发信功能详解

    Java基于命令模式实现邮局发信功能详解

    这篇文章主要介绍了Java基于命令模式实现邮局发信功能,较为详细的分析了命令行模式的概念、原理并结合实例形式分析了Java使用命令行模式实现邮局发信功能的相关操作技巧与注意事项,需要的朋友可以参考下
    2018-04-04
  • Java简单实现动态代理模式过程解析

    Java简单实现动态代理模式过程解析

    这篇文章主要介绍了Java动态代理模式简单案例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-07-07
  • 详解slf4j+logback在java工程中的配置

    详解slf4j+logback在java工程中的配置

    这篇文章主要介绍了slf4j+logback在java工程中的配置,对日志组件logback也进行了简单介绍,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2015-08-08
  • java实现中缀表达式转后缀的方法

    java实现中缀表达式转后缀的方法

    这篇文章主要为大家详细介绍了java实现中缀表达式转后缀的表达式方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-11-11
  • 在SpringBoot 中从application.yml中获取自定义常量方式

    在SpringBoot 中从application.yml中获取自定义常量方式

    这篇文章主要介绍了在SpringBoot 中从application.yml中获取自定义常量方式,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-04-04
  • 浅析Java单例设计模式(自写demo)

    浅析Java单例设计模式(自写demo)

    Java单例模式是看起来以及用起来简单的一种设计模式,但是就实现方式以及原理来说,也并不浅显,下面这篇文章主要给大家详细介绍了Java中单例模式,需要的朋友可以参考下
    2021-12-12

最新评论

?


http://www.vxiaotou.com