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" />
相关推荐
程序员岳焱7 分钟前
Java 与 MySQL 性能优化:Java 实现百万数据分批次插入的最佳实践
后端·mysql·性能优化
FrankYoou11 分钟前
Jenkins 与 GitLab CI/CD 的核心对比
java·docker
麦兜*37 分钟前
Spring Boot启动优化7板斧(延迟初始化、组件扫描精准打击、JVM参数调优):砍掉70%启动时间的魔鬼实践
java·jvm·spring boot·后端·spring·spring cloud·系统架构
KK溜了溜了1 小时前
JAVA-springboot 整合Redis
java·spring boot·redis
大只鹅1 小时前
解决 Spring Boot 对 Elasticsearch 字段没有小驼峰映射的问题
spring boot·后端·elasticsearch
ai小鬼头1 小时前
AIStarter如何快速部署Stable Diffusion?**新手也能轻松上手的AI绘图
前端·后端·github
天河归来1 小时前
使用idea创建springboot单体项目
java·spring boot·intellij-idea
weixin_478689761 小时前
十大排序算法汇总
java·算法·排序算法
葬歌倾城1 小时前
JSON的缩进格式方式和紧凑格式方式
c#·json
码荼1 小时前
学习开发之hashmap
java·python·学习·哈希算法·个人开发·小白学开发·不花钱不花时间crud