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" />
相关推荐
写bug写bug10 分钟前
如何正确地对接口进行防御式编程
java·后端·代码规范
Cyanto21 分钟前
Java并发编程面试题
java·开发语言·面试
不超限27 分钟前
Asp.net core 使用EntityFrame Work
后端·asp.net
在未来等你33 分钟前
互联网大厂Java求职面试:AI大模型与云原生技术的深度融合
java·云原生·kubernetes·生成式ai·向量数据库·ai大模型·面试场景
豌豆花下猫39 分钟前
Python 潮流周刊#105:Dify突破10万星、2025全栈开发的最佳实践
后端·python·ai
sss191s1 小时前
Java 集合面试题从数据结构到 HashMap 源码剖析详解及常见考点梳理
java·开发语言·数据结构
LI JS@你猜啊1 小时前
window安装docker
java·spring cloud·eureka
书中自有妍如玉1 小时前
.net 使用MQTT订阅消息
java·前端·.net
风铃儿~2 小时前
Spring AI 入门:Java 开发者的生成式 AI 实践之路
java·人工智能·spring
斯普信专业组2 小时前
Tomcat全方位监控实施方案指南
java·tomcat