MyBatisPlus(十八)字段类型处理器:对象存为JSON字符串

news2024/11/28 23:48:18

说明

将一个复杂对象(集合或者普通对象),作为 JSON字符串 存储到数据库表中的某个字段中。

MyBatisPlus 提供优雅的方式,映射复杂对象类型字段和数据库表中的字符串类型字段

核心注解

  • @TableName(autoResultMap = true)
  • @TableField(typeHandler = JacksonTypeHandler.class)

示意图如下:

在这里插入图片描述

代码

package com.example.web.entity;

import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler;
import com.example.web.enumeration.GenderEnum;
import lombok.Data;

import java.util.List;

@Data
@TableName(autoResultMap = true)
public class User {
    private Long id;
    private String name;
    private Integer age;
    private String email;
    private Integer deleted;
    private GenderEnum gender;

    @TableField(typeHandler = JacksonTypeHandler.class)
    private List<Integer> tags;

    @TableField(typeHandler = JacksonTypeHandler.class)
    private List<Contact> contacts;

}
package com.example.web.entity;

import lombok.Data;

@Data
public class Contact {
    private String name;
    private String phone;
}

测试

测试一:集合

代码

    /**
     * 插入用户
     */
    @Test
    public void insert() {
        User user = new User();
        user.setId(13L);
        user.setName("孙一");
        user.setAge(27);
        user.setEmail("sunyi@example.com");
        user.setGender(GenderEnum.MALE);
        List<Integer> tags = Stream.of(1, 2, 3, 4, 5).collect(Collectors.toList());
        user.setTags(tags);

        mapper.insert(user);
    }


    /**
     * 查询用户
     */
    @Test
    public void selectById() {
        User user = mapper.selectById(13L);
        log.info("user:{}", user);
    }
    

插入数据

插入用户:
在这里插入图片描述
数据库中的数据:
在这里插入图片描述

查询数据

在这里插入图片描述

测试二:集合 + 对象

代码

    /**
     * 插入用户
     */
    @Test
    public void insertWithContact() {
        User user = new User();
        user.setId(14L);
        user.setName("孙二");
        user.setAge(28);
        user.setEmail("suner@example.com");
        user.setGender(GenderEnum.MALE);

        Contact contact = new Contact();
        contact.setName("吴一");
        contact.setPhone("18612340001");

        Contact contact2 = new Contact();
        contact2.setName("吴二");
        contact2.setPhone("18612340002");

        List<Contact> contacts = Stream.of(contact, contact2).collect(Collectors.toList());
        user.setContacts(contacts);

        mapper.insert(user);
    }


    /**
     * 查询用户
     */
    @Test
    public void selectByIdForContact() {
        User user = mapper.selectById(14L);
        log.info("user:{}", user);
    }

插入数据

插入用户:
在这里插入图片描述

数据库中的数据:
在这里插入图片描述

查询数据

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1096297.html

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

相关文章

【Spring Boot 源码学习】@Conditional 条件注解

Spring Boot 源码学习系列 Conditional 条件注解 引言往期内容主要内容1. 初识 Conditional2. Conditional 的衍生注解 总结 引言 前面的博文&#xff0c;Huazie 带大家从 Spring Boot 源码深入了解了自动配置类的读取和筛选的过程&#xff0c;然后又详解了OnClassCondition、…

nodejs+vue百鸟全科赏析网站

目 录 摘 要 I ABSTRACT II 目 录 II 第1章 绪论 1 1.1背景及意义 1 1.2 国内外研究概况 1 1.3 研究的内容 1 第2章 相关技术 3 2.1 nodejs简介 4 2.2 express框架介绍 6 2.4 MySQL数据库 4 第3章 系统分析 5 3.1 需求分析 5 3.2 系统可行性分析 5 3.2.1技术可行性&#xff1a;…

Linux性能优化--性能工具:特定进程内存

5.0 概述 本章介绍的工具使你能诊断应用程序与内存子系统之间的交互&#xff0c;该子系统由Linux内核和CPU管理。由于内存子系统的不同层次在性能上有数量级的差异&#xff0c;因此&#xff0c;修复应用程序使其有效地使用内存子系统会对程序性能产生巨大的影响。 阅读本章后&…

ubuntu 怎样查看隐藏文件

1.通过界面可视化方式 鼠标点击进入该待显示的文件路径&#xff0c;按下ctrl h 刷新&#xff0c;则显示隐藏文件 2. 通过控制台命令行 若使用命令行&#xff0c;则使用命令&#xff1a;ls -a 显示所有文件&#xff0c;也包括隐藏文件

MPNN 模型:GNN 传递规则的实现

首先&#xff0c;假如我们定义一个极简的传递规则 A是邻接矩阵&#xff0c;X是特征矩阵&#xff0c; 其物理意义就是 通过矩阵乘法操作&#xff0c;批量把图中的相邻节点汇聚到当前节点。 但是由于A的对角线都是 0.因此自身的节点特征会被过滤掉。 图神经网络的核心是 吸周围…

【数据结构与算法】堆排序(向下和向上调整)、TOP-K问题(超详细解读)

前言&#xff1a; &#x1f4a5;&#x1f388;个人主页:​​​​​​Dream_Chaser&#xff5e; &#x1f388;&#x1f4a5; ✨✨专栏:http://t.csdn.cn/oXkBa ⛳⛳本篇内容:c语言数据结构--堆排序&#xff0c;TOP-K问题 目录 堆排序 1.二叉树的顺序结构 1.1父节点和子节点…

Ubuntu:ESP-IDF 开发环境配置【保姆级】

物联网开发学习笔记——目录索引 参考官网&#xff1a;ESP-IDF 物联网开发框架 | 乐鑫科技 ESP-IDF 是乐鑫官方推出的物联网开发框架&#xff0c;支持 Windows、Linux 和 macOS 操作系统。适用于 ESP32、ESP32-S、ESP32-C 和 ESP32-H 系列 SoC。它基于 C/C 语言提供了一个自给…

EmoTalk: Speech-Driven Emotional Disentanglement for 3D Face Animation

问题:现存的方法经常忽略面部的情感或者不能将它们从语音内容中分离出来。 方法:本文提出了一种端到端神经网络来分解语音中的不同情绪,从而生成丰富的 3D 面部表情。 1.我们引入了情感分离编码器(EDE),通过交叉重构具有不同情感标签的语音信号来分离语音中的情感和内容。…

MySQL 的下载与安装

MySQL 的下载 https://cdn.mysql.com/archives/mysql-5.7/mysql-5.7.30-1.el7.x86_64.rpm-bundle.tar 将下载的数据包拉到虚拟机的linux系统的主文件夹下,创建一个MySQL文件存放 安装MySQL 1、解压数据包 tar -xvf mysql-5.7.30-1.el7.x86_64.rpm-bundle.tar -x: 表示解压…

【LLM】浅谈 StreamingLLM中的attention sink和sink token

前言 Softmax函数 SoftMax ( x ) i e x i e x 1 ∑ j 2 N e x j , x 1 ≫ x j , j ∈ 2 , … , N \text{SoftMax}(x)_i \frac{e^{x_i}}{e^{x_1} \sum_{j2}^{N} e^{x_j}}, \quad x_1 \gg x_j, j \in 2, \dots, N SoftMax(x)i​ex1​∑j2N​exj​exi​​,x1​≫xj​,j∈2,……

智慧公厕:提升城市形象的必备利器

智慧公厕是什么&#xff1f;智慧公厕基于物联网的技术基础&#xff0c;整合了互联网、人工智能、大数据、云计算、区块链、5G/4G等最新技术&#xff0c;针对公共厕所日常建设、使用、运营和管理的全方位整体解决方案。智慧公厕广泛应用于旅游景区、城市公厕、购物中心、商业楼宇…

2 files found with path ‘lib/armeabi-v7a/liblog.so‘ from inputs:

下图两个子模块都用CMakeLists.txt引用了android的log库&#xff0c;编译后&#xff0c;在它们的build目录下都有liblog.so的文件。 四个CPU架构的文件夹下都有。 上层模块app不能决定使用哪一个&#xff0c;因此似乎做了合并&#xff0c;路径就是报错里的哪个路径&#xff0c…

WSL Ubuntu 22.04.2 LTS 安装paddle踩坑日记

使用conda安装paddlepaddle-gpu: conda install paddlepaddle-gpu2.5.1 cudatoolkit11.7 -c https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/Paddle/ -c conda-forge 等待安装... 报错处理&#xff1a; (1)(1)PreconditionNotMetError: Cannot load cudnn shared libr…

[BigData:Hadoop]:安装部署篇

文章目录 一&#xff1a;机器103设置密钥对免密登录二&#xff1a;机器102设置密钥对免密登录三&#xff1a;机器103安装Hadoop安装包3.1&#xff1a;wget拉取安装Hadoop包3.2&#xff1a;解压移到指定目录3.2.1&#xff1a;解压移动路径异常信息3.2.2&#xff1a;切换指定目录…

Docker容器端口暴露方式

【Bridge 模式】 当 Docker 进程启动时&#xff0c;会在主机上创建一个名为docker0的虚拟网桥&#xff0c;此主机上启动的 Docker 容器会连接到这个虚拟网桥上。虚拟网桥的工作方式和物理交换机类似&#xff0c;这样主机上的所有容器就通过交换机连在了一个二层网络中。从 doc…

启动速度提升 10 倍:Apache Dubbo 静态化方案深入解析

作者&#xff1a;华钟明 文章摘要&#xff1a; 本文整理自有赞中间件技术专家、Apache Dubbo PMC 华钟明的分享。本篇内容主要分为五个部分&#xff1a; -GraalVM 直面 Java 应用在云时代的挑战 -Dubbo 享受 AOT 带来的技术红利 -Dubbo Native Image 的实践和示例 -Dubbo…

050:mapboxGL加载geojson数据,同时包含点、多边形的处理示例

第050个 点击查看专栏目录 本示例的目的是介绍演示如何在vue+mapbox中加载geojson数据,既显示点又显示多边形。这个示例是显示了一种处理方式,通过过滤的方式将数据分离化,点和多边形通过两个不同的图层来加载表示。 直接复制下面的 vue+mapbox源代码,操作2分钟即可运行实…

Ps:快速蒙版

快速蒙版 Quick Mask是查看和编辑选区的一种模式。 按快捷键 Q 可切换到快速蒙版模式&#xff0c;再按一次 Q 键则会退出快速蒙版模式。 或者&#xff0c;点击工具箱下方的“快速蒙版”按钮来进行切换。 也可使用菜单命令。 Ps菜单&#xff1a;选择/在快速蒙版模式下编辑 Selec…

[管理与领导-120]:IT基层管理 - 决策者和管理者的灵活变通与执著坚持的平衡

目录 前言&#xff1a; 一、决策者什么时候应该灵活多变&#xff1f;路径、方法、过程 二、决策者什么时候应该坚定坚持&#xff1f;方向、愿景、目标 三、PDCA与决策者的灵活多变与坚定坚持的平衡 前言&#xff1a; 作为执行者&#xff0c;只需要按照决策者的要求&#x…

vue3后台管理框架之技术栈

vue3全家桶技术 基础构建&#xff1a; vue3vite4TypeScript 代码格式 &#xff1a; eslintprettystylelint git生命周期钩子&#xff1a; husky css预处理器&#xff1a; sass ui库&#xff1a; element-plus 模拟数据: mock 网络请求&#xff1a; axios 路由&#xff1a; vue…