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;@Datapublic 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.mzph.cn/pingmian/66743.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

大数据在公安领域中的应用分析

在当今信息化时代&#xff0c;数据已经成为一种新的生产要素&#xff0c;对于公安机关而言&#xff0c;如何有效地管理和利用这些数据资源&#xff0c;成为了提高警务工作效能和服务质量的重要途径。海量数据的获取确实为公安机关带来了前所未有的机遇&#xff0c;比如通过分析…

用于与多个数据库聊天的智能 SQL 代理问答和 RAG 系统(3) —— 基于 LangChain 框架的文档检索与问答功能以及RAG Tool的使用

介绍基于 LangChain 框架的文档检索与问答功能&#xff0c;目标是通过查询存储的向量数据库&#xff08;VectorDB&#xff09;&#xff0c;为用户的问题检索相关内容&#xff0c;并生成自然语言的答案。以下是代码逻辑的详细解析&#xff1a; 代码结构与功能 初始化环境与加载…

uniapp:钉钉小程序需要录音权限及调用录音

{// ... 其他配置项"mp-dingtalk": {"permission": {"scope.userLocation" : {"desc" : "系统希望获得您的定位用于确认您周围的设施数据"},"scope.bluetooth" : {"desc" : "你的蓝牙权限将用于小…

基于QT和C++的实时日期和时间显示

一、显示在右下角 1、timer.cpp #include "timer.h" #include "ui_timer.h" #include <QStatusBar> #include <QDateTime> #include <QMenuBar> Timer::Timer(QWidget *parent) :QMainWindow(parent),ui(new Ui::Timer) {ui->setup…

Elasticsearch学习(1) : 简介、索引库操作、文档操作、RestAPI、RestClient操作

目录 1.elasticsearch简介1.1.了解es1.2.倒排索引正向索引和倒排索引 1.3.es的一些概念:文档和字段&#xff1b;索引和映射&#xff1b;Mysql与ES1.4.安装es、kibana部署单点es部署kibanaIK分词器安装IK分词器与测试扩展与停用词词典总结 部署es集群 2.索引库操作2.1.mapping映…

【LeetCode Hot100 贪心算法】 买卖股票的最佳时机、跳跃游戏、划分字母区间

贪心算法 买卖股票的最佳时机买卖股票的最佳时机II跳跃游戏跳跃游戏II划分字母区间 买卖股票的最佳时机 给定一个数组 prices &#xff0c;它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。 你只能选择 某一天 买入这只股票&#xff0c;并选择在 未来的某一个不同的…

SQL SERVER__RSN 恢复的深入解析

1. RSN 的工作原理 RSN 是 SQL Server 内部用于跟踪和管理备份和恢复操作顺序的编号。每次数据库备份&#xff08;包括完整备份、差异备份和事务日志备份&#xff09;都会生成一个唯一的 RSN。SQL Server 在恢复过程中使用 RSN 来确保备份文件按正确的顺序应用&#xff0c;从而…

Rabbitmq 具体怎么做到削峰的,是丢弃部分消费吗,有的实际场景是不允许丢弃

在高并发场景中&#xff0c;RabbitMQ 可以通过几种策略来实现 削峰&#xff08;缓解瞬时负载激增&#xff09;&#xff0c;而这些策略并不一定需要丢弃消息。在一些业务场景下&#xff0c;丢弃消息显然是不允许的&#xff0c;因此在这种情况下&#xff0c;可以使用以下方法来确…

如何在 Ubuntu 22.04 上使用 LEMP 安装 WordPress 教程

简介&#xff1a; 本教程旨在指导你如何在 Ubuntu 22.04 上使用 LEMP 栈安装 WordPress。 WordPress 是一个用 PHP 编写的开源内容管理系统。LEMP 栈是 Linux&#xff0c;NGINX&#xff0c;MySQL 和 PHP 的缩写。WordPress 非常用户友好&#xff0c;并提供了多种选项&#xff…

MyBatis深入了解

目录 xml 映射文件中&#xff0c;除了常见的select、insert、update、delete 标签之外&#xff0c;还有哪些标签? Dao 接口的工作原理是什么?Dao 接口里的方法&#xff0c;参数不同时&#xff0c;方法能重载吗? MyBatis 是如何进行分页的?分页插件的原理是什么? 简述 …

Springboot Bean创建流程、三种Bean注入方式(构造器注入、字段注入、setter注入)、循坏依赖问题

文章目录 1 Bean 创建流程1.1 Bean的扫描注册1.2 创建Bean的顺序 2 三种Bean注入方式2.1 构造器注入 | Constructor Injection&#xff08;推荐&#xff09;2.2 字段注入 | Field Injection&#xff08;常用&#xff09;2.3 方法注入 | Setter Injection2.4 三种方式注入顺序 3…

vue实现虚拟列表滚动

<template> <div class"cont"> //box 视图区域Y轴滚动 滚动的是box盒子 滚动条显示的也是因为box<div class"box">//itemBox。 一个空白的盒子 计算高度为所有数据的高度 固定每一条数据高度为50px<div class"itemBox" :st…

STM32小实验2

定时器实验 TIM介绍 TIM&#xff08;Timer&#xff09;定时器 定时器可以对输入的时钟进行计数&#xff0c;并在计数值达到设定值时触发中断 16位计数器、预分频器、自动重装寄存器的时基单元&#xff0c;在72MHz计数时钟下可以实现最大59.65s的定时 不仅具备基本的定时中断…

HTB:Timelapse[WriteUP]

目录 连接至HTB服务器并启动靶机 信息收集 使用rustscan对靶机TCP端口进行开放扫描 提取并保存靶机TCP开放端口号 使用nmap对靶机TCP开放端口进行脚本、服务扫描 使用nmap对靶机TCP开放端口进行漏洞、系统扫描 使用nmap对靶机常用UDP端口进行开放扫描 使用nmap对靶机UD…

【贵州省】乡镇界arcgis格式shp数据乡镇名称和编码内容下载测评

shp数据字段乡镇名称和编码&#xff0c;坐标是wgs84&#xff0c;数据为SHP矢量格式&#xff0c;下载下来直接加载进ArcMap即可使用 下载地址&#xff1a;https://download.csdn.net/download/zhongguonanren99/14928126

《鸿蒙系统AI技术:筑牢复杂网络环境下的安全防线》

在当今数字化时代&#xff0c;复杂网络环境给智能系统带来了诸多安全挑战&#xff0c;而鸿蒙系统中的人工智能技术却展现出强大的安全保障能力&#xff0c;为用户在复杂网络环境中的安全保驾护航。 微内核架构&#xff1a;安全基石 鸿蒙系统采用微内核架构&#xff0c;将核心…

[免费]微信小程序(高校就业)招聘系统(Springboot后端+Vue管理端)【论文+源码+SQL脚本】

大家好&#xff0c;我是java1234_小锋老师&#xff0c;看到一个不错的微信小程序(高校就业)招聘系统(Springboot后端Vue管理端)&#xff0c;分享下哈。 项目视频演示 【免费】微信小程序(高校就业)招聘系统(Springboot后端Vue管理端) Java毕业设计_哔哩哔哩_bilibili 项目介绍…

“AI智能实训系统:让学习更高效、更轻松!

大家好&#xff0c;作为一名资深产品经理&#xff0c;今天我来跟大家聊聊一款备受瞩目的产品——AI智能实训系统。在这个人工智能技术飞速发展的时代&#xff0c;AI智能实训系统应运而生&#xff0c;为广大学习者提供了全新的学习体验。那么&#xff0c;这款产品究竟有哪些亮点…

Linux下字符设备驱动编写(RK3568)

文章目录 一 基础知识概念特点常见应用场景 二 linux 下的字符设备字符设备在 /dev 目录下用 ls -l 命令查看字符设备文件类型主设备号和次设备号 三 字符驱动模块的编写1. 头文件引入2. 定义错误码枚举3. 设备操作函数定义4. 关键结构体与变量定义5. 驱动入口函数&#xff08;…

Lua语言的数据类型

Lua语言的数据类型详解 Lua是一种轻量级、高效的脚本语言&#xff0c;广泛应用于游戏开发、嵌入式系统等领域。它的灵活性和简洁性是其受欢迎的因素之一。其中&#xff0c;Lua的基本数据类型构成了语言的基础&#xff0c;使得开发者可以更高效地处理各种数据。本文将全面介绍L…