MySQL json类型与Java中实体类映射

10,744 阅读1分钟

需求说明

今天在工作中遇到这样一个需求,请求参数、返回参数要以JSONArray的数据类型要存储,正好MySQL支持了json数据类型,直接存储为json类型就不需要二次转换了。

说明:持久层框架mybatis-plus,MySQL 5.7+才开始支持json数据格式。

image.png 请求参数说明数据结构如下,是一个json数组,那我们后端也采用json数组接收

[                {                    "order":1,                    "paramName":"name",                    "type":"string",                    "iseRequest":"是",                    "remark":"名字"                },                {                    "order":2,                    "paramName":"age",                    "type":"int",                    "iseRequest":"是",                    "remark":"年龄"                }            ]

后端接收对象为:

 /**
     * 请求参数示例
     */
    @ApiModelProperty(value="请求参数示例")
    private JSONArray requestParam;

数据库中字段如下:

  `request_param` json NULL COMMENT '请求参数示例',

image.png

实现

首先需要在字段上添加注解:

 /**
     * 请求参数示例
     */
    @ApiModelProperty(value="请求参数示例")
    @TableField(typeHandler = JacksonTypeHandler.class)
    private JSONArray requestParam;

接下来在mapper文件上

<result property="requestParam" column="request_param"
                jdbcType="JAVA_OBJECT" javaType="cn.hutool.json.JSONArray"
                typeHandler="com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler"/>

这样最后读取也不会报错,但读不出来一直为null,还需要在实体类上加上注解

@TableName(value = "model_release",autoResultMap = true)

这样就可以对数据库的json对象进行读取了,无需进行二次解析。