数据库中Json字符串的存取问题

前端传json对象,后端如何将json对象转为字符串入库,查询时将数据库中Json字符串转为对象回传前端。

数据库:
在这里插入图片描述

其中rest_date_ranges字段:
[{"month":"2021-02","weekdays":"1","custom":["1","2","3"]}]
register_source字段:
{"type":1,"quantity":1,"weekdays":2,"weekends":2,"customData":[{"date":"2021-11-17","count":"4"}]}

后端实体类对象:
在这里插入图片描述
其中JacksonTypeHandler是MybatisPlus包下自带的处理类,而IntegerListToCharTypeHandler是自己实现的,将用List对象接收前端传的字段,入库时转换为字符串,如前端[1,2,3,4] 那么入库后就是1,2,3,4
同理JacksonTypeHandler作用类似
IntegerListToCharTypeHandler

@MappedTypes({List.class})
@MappedJdbcTypes({JdbcType.CHAR})
public class IntegerListToCharTypeHandler implements TypeHandler<List<Integer>> {

    private List<Integer> stringToList(String str) {
        if (StringUtil.isEmpty(str)) {
            return new ArrayList<>();
        }

        return Arrays.stream(str.split(",")).filter(NumberUtils::canParseInt).map(Integer::parseInt).collect(Collectors.toList());
    }

    @Override
    public void setParameter(PreparedStatement ps, int i, List<Integer> parameter, JdbcType jdbcType) throws SQLException {
        ps.setString(i, Joiner.on(",").join(parameter));
    }

    @Override
    public List<Integer> getResult(ResultSet rs, String columnName) throws SQLException {
        return stringToList(rs.getString(columnName));
    }

    @Override
    public List<Integer> getResult(ResultSet rs, int columnIndex) throws SQLException {
        return stringToList(rs.getString(columnIndex));
    }

    @Override
    public List<Integer> getResult(CallableStatement cs, int columnIndex) throws SQLException {
        return stringToList(cs.getString(columnIndex));
    }
}

mappr文件中
在这里插入图片描述

<result property="restDateRanges" column="rest_date_ranges" typeHandler="com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler"/>
        <result property="restWeekdays" column="rest_weekdays" typeHandler="com.guokang.ms.common.typehandler.IntegerListToCharTypeHandler"/>
        <result property="registerSource" column="register_source" typeHandler="com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler"/>

想要Json字符串入库后,下次查询返回时还是Json对象,需要在实体类中加一个注解参数:autoResultMap = true
在这里插入图片描述

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值