栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

mybatis中操作json类型数据

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

mybatis中操作json类型数据

mysql使用json类型字段保存数据,使用mybatis进行新增、查询操作,实现字段映射转换

  1. 自定义TypeHandler
package com.xxx.xxx.handler;
  
import java.io.IOException;  
import java.sql.CallableStatement;  
import java.sql.PreparedStatement;  
import java.sql.ResultSet;  
import java.sql.SQLException;  
  
import com.fasterxml.jackson.core.JsonProcessingException;  
import com.fasterxml.jackson.databind.DeserializationFeature;  
import com.fasterxml.jackson.databind.ObjectMapper;  
import lombok.extern.slf4j.Slf4j;  
import org.apache.ibatis.exceptions.PersistenceException;  
import org.apache.ibatis.type.baseTypeHandler;  
import org.apache.ibatis.type.JdbcType;  
import org.apache.ibatis.type.MappedJdbcTypes;  


@Slf4j
@MappedJdbcTypes(JdbcType.VARCHAR)
public class JacksonTypeHandler extends baseTypeHandler {
    private static ObjectMapper objectMapper;
    private Class type;

    static {
        objectMapper = new ObjectMapper();
        objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
    }

    public JacksonTypeHandler(Class type) {
        if (log.isTraceEnabled()) {
            log.trace("JacksonTypeHandler(" + type + ")");
        }
        if (null == type) {
            throw new PersistenceException("Type argument cannot be null");
        }
        this.type = type;
    }

    private T parse(String json) {
        try {
            if (json == null || json.length() == 0) {
                return null;
            }
            return objectMapper.readValue(json, type);
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }

    private String toJsonString(T obj) {
        try {
            return objectMapper.writevalueAsString(obj);
        } catch (JsonProcessingException e) {
            throw new RuntimeException(e);
        }
    }

    @Override
    public T getNullableResult(ResultSet rs, String columnName) throws SQLException {
        return parse(rs.getString(columnName));
    }

    @Override
    public T getNullableResult(ResultSet rs, int columnIndex) throws SQLException {
        return parse(rs.getString(columnIndex));
    }

    @Override
    public T getNullableResult(CallableStatement cs, int columnIndex) throws SQLException {
        return parse(cs.getString(columnIndex));
    }

    @Override
    public void setNonNullParameter(PreparedStatement ps, int columnIndex, T parameter, JdbcType jdbcType)
            throws SQLException {
        ps.setString(columnIndex, toJsonString(parameter));
    }
}
  1. yml配置文件中添加配置
mybatis:
  mapper-locations: classpath:mapper/*.xml
  type-handlers-package: com.xx.xx.handler
  1. 在mapper文件中编写对应的字段映射规则
 
            //指定返回信息使用该Typehandler
`parameter` = #{parameter,javaType=com.xx.xx.entity.ParameterEntity, typeHandler=com.xx.xx.handler.JacksonTypeHandler},
//新增或修改时指定该字段对应的对象类型、以及Typehandler
  1. 结果
//新增结果
{
    "code": 200,
    "msg": "操作成功",
    "data": {
        "id": "9c43257c-90ff-464d-aa84-43784b728c06",
        "name": "string",
        "parameter": [
            {
                "name": "新增的参数",
                "type": 1
            },
            {
                "name": "新增的参数",
                "type": 1
            }
        ],
        "createTime": "2021-11-25T11:54:24.577+08:00",
        "updateTime": "2021-11-25T11:54:24.577+08:00"
    }
}
//查询结果
{
  "code": 200,
  "msg": "操作成功",
  "data": [
    {
      "id": "2ecb88f6-c99c-4877-ade5-72c3081b6009",
      "name": "string",
      "parameter": [
        {
          "name": "新增的参数",
          "type": 1
        },
        {
          "name": "新增的参数",
          "type": 1
        }
      ],
      "createTime": "2021-11-25T00:00:00.000+08:00",
      "updateTime": "2021-11-25T00:00:00.000+08:00"
    },
    {
      "id": "65e0a272-4267-4ea8-a89b-79e811ca2e17",
      "name": "string2",
      "parameter": [
        {
          "name": "新增的参数",
          "type": 1
        },
        {
          "name": "新增的参数",
          "type": 1
        }
      ],
      "createTime": "2021-11-25T00:00:00.000+08:00",
      "updateTime": "2021-11-25T00:00:00.000+08:00"
    }
  ]
}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/603103.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号