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

news/2024/7/1 22:03:32 标签: mybatis-plus, spring boot, json, 数据库

说明

将一个复杂对象(集合或者普通对象),作为 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.niftyadmin.cn/n/5093238.html

相关文章

-带你看懂11种API类型及应用-

一起走进多样的API&#xff0c;多样的精彩 随着互联网行业的日益发展&#xff0c;API(Application Programming Interface)这个名词对于绝大多数来说都已不再陌生。然而&#xff0c;实际上&#xff0c;根据不同标准可以划分出不同类型的API。今天&#xff0c;让我们来走…

AI时代Excel数据分析提升之道

欢迎关注博主 Mindtechnist 或加入【智能科技社区】一起学习和分享Linux、C、C、Python、Matlab&#xff0c;机器人运动控制、多机器人协作&#xff0c;智能优化算法&#xff0c;滤波估计、多传感器信息融合&#xff0c;机器学习&#xff0c;人工智能等相关领域的知识和技术。关…

RabbitMQ之幂等性问题处理

目录 基本介绍 RabbitMQ幂等性问题 如何避免消息的重复消费问题&#xff1f; 基本介绍 消息消费时的幂等性&#xff08;消息不被重复消费&#xff09;&#xff0c;同一个消息&#xff0c;第一次接收&#xff0c;正常处理业务&#xff0c;如果该消息第二次再接收&#xff0c;…

生物信息学研究方向

一、生信的两个大类研究方向&#xff1a; 目录 一、生信的两个大类研究方向&#xff1a; 前者偏理论&#xff0c;后者偏向证明 第一类研究方向&#xff1a; 第二类研究方向&#xff1a; 二、具体的研究方向 1、序列分析 2、计算进化生物学 3、生物多样性的度量 4、蛋…

揭秘OLED透明拼接屏的参数规格:分辨率、亮度与透明度全解析

作为一种新型的显示技术&#xff0c;OLED透明拼接屏在市场中正在迅速崭露头角&#xff0c;有很多知名品牌厂家能设计、开发、生产高品质的显示产品。 如尼伽、起鸿、康视界、LG、YCTIMES、腾裕等&#xff0c;这些品牌在显示技术领域拥有丰富的经验和声誉&#xff0c;以其卓越的…

【linux kernel】linux的platform设备驱动框架分析

文章目录 一、简介二、platform总线三、platform设备和驱动的匹配过程四、platrom驱动和platform设备五、platform驱动设计六、代码示例 &#x1f53a;【linux内核系列文章】 &#x1f449;对一些文章内容进行了勘误&#xff0c;本系列文章长期不定时更新&#xff0c;希望能分享…

目标检测YOLO实战应用案例100讲-基于YOLOv5_tiny算法的路面裂缝智能检测

目录 前言 国内外研究现状 公路路面裂缝检测方法现状 基于深度学习检测算法现状

RobotFramework用户关键字(一)

文章目录 一 用户关键字1. 创建用户关键字2. 用户关键字的使用3. 用户关键字参数4. 用户关键字返回参数 一 用户关键字 Robotframework是一个用python写的基于关键字驱动的自动化测试框架。既然是基于关键字驱动的&#xff0c;那么关键字的编写和使用就是平时工作的核心。这篇文…