数据库json类型字段对应实体类及解决方案
使用Map接收就不用考虑转换的问题,但是后端同学要和前端同学统一传值规则,即字段名称,后端在使用Map,get()方式的时候注意非空判断即可。详情:获取对象信息后,通过getLabels()方法拿到该参数List<labels> labels,然后for循环处理。需要对数组(集合)中的数据做处理,就要注意了,如果按照以往的处理方式,我们可以直接获取实体类对象中的该属性,比如。至此,我们需要使用Ob
在表中创建一个字段来接收多个字符串组成的数组信息,这是一个很常见的方法,有优点也有缺点,我们暂且不论,就如何实现和遇到问题的解决方案展开
一、数据库设计
我们可以将该字段类型为json
举例:
表 product 其中有一个字段为 labels,为json类型。
二、实体类设计
在创建实体类的时候,将labels字段设置成为
@TableField(typeHandler = JacksonTypeHandler.class, jdbcType = JdbcType.VARCHAR)
private List<String> labels
三、使用(CRUD)
详情:获取对象信息后,通过getLabels()方法拿到该参数List<labels> labels,然后for循环处理
列表:将详情步骤写入列表的for循环内即可
新增:结合mybatis-plus,使用insert()方法即可
修改:结合mybatis-plus,使用update()方法即可,记得要传主键参数
删除:根据ID删除,不用多说了
以上是针对存储的信息是以字符串为数组的,如果是以k-v键值对的对象数组(集合)呢
方法一:
第一步,维持不变
第二步,如果是已经创建了该键值对对应的对象
比如
@Data
@NoArgsConstructor
@AllArgsConstructor
public class ProductImages{
private String url;
private Integer sort;
}
已经有了实体类,则在Product实体中按如下方式创建
@TableField(typeHandler = JacksonTypeHandler.class, jdbcType = JdbcType.VARCHAR)
private List<ProductImages> images;
第三步,使用也会有很大的变化
需要对数组(集合)中的数据做处理,就要注意了,如果按照以往的处理方式,我们可以直接获取实体类对象中的该属性,比如
ProductInfo productInfo = productInfoMapper.selectProductInfoById(id);
List<ProductImages> images = productInfo.getImages();
但是问题来,如果你直接for循环处理images就会报错关于LinkHashMap,
至此,我们需要使用Object转换,上代码
ObjectMapper objectMapper = new ObjectMapper();
if(images!=null){
List<ProductImages> list = new ArrayList<>();
for (Object image : images) {
//转换
ProductImages productImages = objectMapper.convertValue(image, ProductImages.class);
if(productImages!=null&&productImages.getUrl()!=null&&productImages.getSort()!=null){
ProductImages productImage = new ProductImages();
String url = productImages.getUrl();
productImage.setSort(productImages.getSort());
productImage.setUrl(aliyunOSSUtils.getFileName(url));
list.add(productImage);
}
}
productInfo.setImages(list);
}
这样就可以解决遇到的问题,在需要处理json字段的地方使用类似方法即可。
方法二:
使用Map
第一步,维持不变
第二步,实体类属性如下
@TableField(typeHandler = JacksonTypeHandler.class, jdbcType = JdbcType.VARCHAR)
private List<Map<String,Object>> images;
第三步,使用
使用Map接收就不用考虑转换的问题,但是后端同学要和前端同学统一传值规则,即字段名称,后端在使用Map,get()方式的时候注意非空判断即可。
希望本文章对你有用,如果有用的话,不妨给个免费的赞和收藏,感谢,共勉!
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐


所有评论(0)