• MyBatisPlus(十八)字段类型处理器:对象存为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;
    
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    package com.example.web.entity;
    
    import lombok.Data;
    
    @Data
    public class Contact {
        private String name;
        private String phone;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    测试

    测试一:集合

    代码

        /**
         * 插入用户
         */
        @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);
        }
        
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27

    插入数据

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

    查询数据

    在这里插入图片描述

    测试二:集合 + 对象

    代码

        /**
         * 插入用户
         */
        @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);
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35

    插入数据

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

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

    查询数据

    在这里插入图片描述

  • 相关阅读:
    早期Java Swing的eclipse项目导入idea使用
    轻量级CI/CD发布部署环境搭建及使用_01_基本介绍
    Redis之主从复制(一主两从)&薪火相传&反客为主&哨兵模式
    cannot find -ldl
    F#奇妙游(35):MVC模式和ADT分析
    C语言百日刷题第九天
    基于信道状态信息的Wi-Fi感知技术与实践
    insertAdjacentHTML() 作用
    【全开源】JAVA情侣扭蛋机情侣游戏系统源码支持微信小程序+微信公众号+H5
    Java之多线程的综合练习二
  • 原文地址:https://blog.csdn.net/sgx1825192/article/details/133846623