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

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

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

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

二、实操

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

java 复制代码
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 复制代码
<?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" />
相关推荐
qianbailiulimeng8 分钟前
2019阿里java面试题(一)
java·后端
码事漫谈12 分钟前
虚函数指针与虚函数表:C++多态的实现奥秘
后端
Moment15 分钟前
Cursor 2.0 支持模型并发,我用国产 RWKV 模型实现了一模一样的效果 🤩🤩🤩
前端·后端·openai
码事漫谈18 分钟前
写博客实用工具!5分钟使用ShareX实现步骤批量截图
后端
Madison-No720 分钟前
【C++】关于list的使用&&底层实现
数据结构·c++·stl·list·模拟实现
Bug退退退12321 分钟前
ArrayList 与 LinkedList 的区别
java·数据结构·算法
狂炫冰美式24 分钟前
QuizPort 1.0 · 让每篇好文都有测验陪跑
前端·后端·面试
LBuffer30 分钟前
破解入门学习笔记题三十四
java·笔记·学习
缺点内向35 分钟前
Java: 如何在Excel中添加或删除分页符?
java·excel
m0_521329031 小时前
java-File的创建和删除
java