在公司写日志工具的时候,出现了这样的问题,字段名,字段描述,修改前数据和修改后数据的展示,如果直接给前端传输的数据是几个字段分别提供这几个数据,那么在前端展示时,其实是不好展示的,遍历展示的话,组件展示出的效果是类似于列表展示的形式。
如果字段多的话,就要滚轮左右拉动才能进行查看,其实不是很方便。这个时候只能将这几个字段放在同一个字段中,并且以字段名,字段描述,修改前数据和修改后数据为一个对象,这样保存,才方便前端展示,而这个时候又会出现问题。
我们保存的时候希望以JSONArray的数据格式进行保存,而读取同样如此,但是如果不添加注解,直接保存是会出现错误的。
我们需要在要保存的JSONArray类型的字段上添加注解
@TableField(value = "content", typeHandler = JacksonTypeHandler.class)
其中content是我们这个字段对应的数据库表的字段名,typeHandler 后面是我们需要的类型处理器,这个处理器我们也可以继承然后自定义,但是为了方便,我们还是用了MybatisPlus自带的处理器。
这仅仅是在字段上进行了注解,我们同时还要在mapper.xml进行处理器的标注,这样才能达到映射的效果。
<result column="content" property="content" typeHandler="com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler" />
这是在mapper.xml中字段映射的代码,我们其实是在后面加上了typeHandler和对应的映射器而已。
完成这两处修改,其实在数据插入的时候,就已经没有问题了,数据中的text类型的字段已经可以插入后端的JSONArray数据。
但是这个时候,你如果写个查询接口去查询数据,会发现,为什么查询不到保存的JSONArray数据呢,明明数据库中已经有了数据,但是查询出的数据却为空。
其实还是因为缺少了配置,我们要在JSONArray字段对应的实体类上添加注解。
@TableName(value = "table_name", autoResultMap = true)
其实这个注解大家一直都在用,但是我们都只用了前面的value部分,用来对应数据库表名。autoResultMap用来标注是否默认使用结果集,如果不添加这个属性,或者这个属性为false,那么我们在映射JSON字段类型的时候(包括JSONArray),其实查询结果是会直接返回null的,而添加了该字段为true,就能正常根据对应的类型处理器进行解析,从而查询到结果。