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