当前位置: 首页 > article >正文

Spring Boot + MyBatis Plus 存储 JSON 或 List 列表全攻略

在现代的后端开发中,我们常常需要处理复杂的数据结构,JSON 数据以及列表(List)数据屡见不鲜。如何高效地使用 Spring Boot 和 MyBatis Plus 来存储这些复杂数据类型,是这篇博客要探讨的重点。

一、为什么要存储 JSON 或 List 列表

例如商品的规格参数可能是一个复杂的 JSON 字符串,它包含了尺寸、颜色、材质等多个维度的信息。这时,能够直接存储 JSON 或 List 列表就显得尤为重要,它让我们的数据模型更加贴合业务实际需求,减少不必要的数据库表关联,简化开发流程。

二、实操

假设我们要存储一篇文章,文章有标题、内容,还有一个标签列表(List<String>)以及一些额外的元数据(以 JSON 格式存储)。

import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;

import java.util.List;

@Data
@TableName(value = "articles", autoResultMap = true)
public class Article {

    private Long id;

    private String title;

    private String content;

    @TableField(typeHandler = com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler.class)
    private List<String> tags;

    @TableField(typeHandler = com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler.class)
    private Metadata metadata;

    @Data
    public static class Metadata {
        private String author;
        private String publishDate;
    }
}

在上述实体类中,通过 @TableField 注解结合 JacksonTypeHandler(MyBatis Plus 自带的一种 JSON 类型处理器,它依赖于 Jackson 库进行 JSON 序列化和反序列化),告诉 MyBatis Plus 要将 tags 列表和 metadata 对象以 JSON 形式存储到数据库对应的字段中。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.test.mapper.ArticleMapper">

    <!-- 查询映射结果 -->
    <resultMap id="BaseResultMap" type="com.test.entity.Article">
        <result column="id" property="id" />
        <result column="title" property="title" />
        <result column="content" property="content" />
        <result column="tags"  property="tags" typeHandler="com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler" />
        <result column="metadata" property="metadata" typeHandler="com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler" />
    </resultMap>

</mapper>

配置重点:

  • @TableName中的 autoResultMap = true
  • @TableField(typeHandler = com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler.class)
  • <result column="tags"  property="tags" typeHandler="com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler" />

http://www.kler.cn/a/487516.html

相关文章:

  • C++ 常见面试题(二)
  • WEB前端-2
  • (七)人工智能进阶之人脸识别:从刷脸支付到智能安防的奥秘,小白都可以入手的MTCNN+Arcface网络
  • Django学习笔记之数据库(一)
  • 大数据技术 指令笔记1
  • 用OpenCV实现UVC视频分屏
  • matlab离线安装硬件支持包
  • WPF连接USB相机,拍照,视频 示例
  • 《Spring Framework实战》4:Spring Framework 文档
  • Qt仿音乐播放器:媒体类
  • 降噪去噪学习流程和算法分类总结
  • 6 分布式限流框架
  • 蓝桥杯 第十五届 研究生组 B题 召唤数学精灵
  • C# 使用iText 编辑PDF
  • Golang学习笔记_23——error补充
  • AI绘画:Midjourney和stable diffusion到底有什么区别?
  • 基于单片机的空调温度测试测控系统设计
  • es 单个节点cpu过高
  • EasyExcel(二)导出Excel表自动换行和样式设置
  • 大数据高级ACP学习笔记(3)
  • 腾讯云AI代码助手编程挑战赛-武器大师
  • 109周四复盘 (183)慢速
  • Spring AMQP-lazy队列
  • spring boot controller放到那一层
  • mysql连表查询报Illegal mix of collations (utf8mb4_general_ci,IMPLICIT)
  • stringRedisTemplate.execute执行lua脚本