说明
将一个复杂对象(集合或者普通对象),作为 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);
    }
 
插入数据
插入用户:
 
数据库中的数据:
 
查询数据













![[BigData:Hadoop]:安装部署篇](https://img-blog.csdnimg.cn/4434177eac0d47449b9d78065899728b.png)




![[管理与领导-120]:IT基层管理 - 决策者和管理者的灵活变通与执著坚持的平衡](https://img-blog.csdnimg.cn/870065b3cf0c414a8cc2f9f8d2c19acd.png)
