mybatis plus实体类中字段映射mysql中的json格式方式
作者:小明哥带你飞
这篇文章主要介绍了mybatis plus实体类中字段映射mysql中的json格式方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
mybatis plus实体类中字段映射mysql中的json格式
1.实体类中有个属性是其他对象
或者是List;在数据库中存储时使用的是mysql的json格式,此时可以用mybatis plus的一个注解
@TableField(typeHandler = JacksonTypeHandler.class)
@TableField(typeHandler = JacksonTypeHandler.class)
这样在存入是就可以把对象自动转换为json格式,
2.那么取出时怎么进行映射呢,有分为两种情况
- a:当没有使用到xml时:
@Data @Accessors(chain = true) @TableName(value = "wx_user",autoResultMap = true)
- b:当使用了xml文件时:
mybatis-plus 实体 json 处理
本文总共三个步骤
- 1、在数据库表定义JSON字段;
- 2、在实体类加上@TableName(autoResultMap = true)、在JSON字段映射的属性加上@TableField(typeHandler = FastjsonTypeHandler.class);
- 3、建一些业务代码进行测试;
在数据库表定义JSON字段
CREATE TABLE `extra_info` ( `id` int(10) NOT NULL AUTO_INCREMENT PRIMARY KEY, `extra_object` json NULL, `extra_list` json NULL, `extra_array` json NULL ); INSERT INTO `extra_info` VALUES (1, '{\"id\": 1, \"name\": \"2\"}', '[{\"id\": 1, \"name\": \"2\"}]', '[{\"id\": 1, \"name\": \"2\"}]');
在实体类加上@TableName(autoResultMap = true)、在JSON字段映射的属性加上@TableField(typeHandler = FastjsonTypeHandler.class)
import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import com.baomidou.mybatisplus.extension.handlers.FastjsonTypeHandler; import java.io.Serializable; import java.util.List; @TableName(autoResultMap = true) public class ExtraInfo implements Serializable { @TableId(type = IdType.AUTO) private Integer id; @TableField(typeHandler = FastjsonTypeHandler.class) private ExtraNode extraObject; @TableField(typeHandler = FastjsonTypeHandler.class) private List<ExtraNode> extraList; @TableField(typeHandler = FastjsonTypeHandler.class) private ExtraNode[] extraArray; public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public ExtraNode getExtraObject() { return extraObject; } public void setExtraObject(ExtraNode extraObject) { this.extraObject = extraObject; } public List<ExtraNode> getExtraList() { return extraList; } public void setExtraList(List<ExtraNode> extraList) { this.extraList = extraList; } public ExtraNode[] getExtraArray() { return extraArray; } public void setExtraArray(ExtraNode[] extraArray) { this.extraArray = extraArray; } }
建一些业务代码进行测试
import java.io.Serializable; public class ExtraNode implements Serializable { private Integer id; private String name; public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } }
import com.baomidou.mybatisplus.core.mapper.BaseMapper; import org.springframework.stereotype.Repository; @Repository public interface ExtraInfoMapper extends BaseMapper<ExtraInfo> { }
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import java.util.List; @RestController @RequestMapping("/test") public class TestController { @Autowired private ExtraInfoMapper extraInfoMapper; @GetMapping public List<ExtraInfo> listAll() { return this.extraInfoMapper.selectList(new LambdaQueryWrapper<>()); } }
运行结果:
[
{
"id": 1,
"extraObject": { "id": 1, "name": "2" },
"extraList": [
{ "name": "2", "id": 1 }
],
"extraArray": [
{ "id": 1, "name": "2" }
]
}
]
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。