MyBatis Plus实体类复杂属性(List<>)

实体类

在实体类中 @TableName 注解内添加属性值 autoResuleMap = true,字段加 @TableField 注解,value属性值添加 typeHandler = JacksonTypeHandler.classtypeHandler = FastjsonTypeHandler.class

包名为:

import com.baomidou.mybatisplus.extension.handlers.FastjsonTypeHandler;
import com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler;

@TableName(value = "TableName", autoResultMap = true)
public class CustomerEntity {
    /**
     * 行政区域(JSON数组ID)
     */
    @TableField(value = "F_LevelAddressIds", typeHandler = FastjsonTypeHandler.class)
    private List<String> levelAddressIds;

    /**
     * 模板图片
     */
    @TableField(value = "images", typeHandler = JacksonTypeHandler.class)
    private List<Map<String, String>> images;

}

数据库

FastjsonTypeHandler.class
JacksonTypeHandler.class

插入

插入结果分别为

 ["a","b"]

[{"name":"62190702a6c545609ba1598fd065ed3c-0.png","url":"C:\\Users\\WIN11\\AppData\\Local\\Temp\\62190702a6c545609ba1598fd065ed3c-0.png"},{"name":"62190702a6c545609ba1598fd065ed3c-1.png","url":"C:\\Users\\WIN11\\AppData\\Local\\Temp\\62190702a6c545609ba1598fd065ed3c-1.png"}]

查询

1.当表数据为 [] 时,查询结果为 空List
2.当表数据为 (NULL)“” 时,查询结果为 null
3.实体类中需要加入autoResultMap = true,否则查询时,返回结果为 null

resultMap

方式一:实体类注解

在这里插入图片描述

方式二:XML

xml与实体类的autoResultMap并无关联,是要分别处理的
这里需要定义resultMap,加入 typeHandler 属性,并且查询标签需要使用此resultMap

在这里插入图片描述

<select id="listByComplex" resultMap="BaseResultMap">
	xxxxxxxx
    </select>

图中用的是FastjsonTypeHandler,JacksonJsonTypeHandler同理

说明

MVC 和 MySQL 的解析

MVC JSON解析:
三层架构中使用的JSON解析,控制器接收JSON参数后转成List<Object>等类型的参数

MySQL JSON解析:
访问数据库时,查询将JSON数据转为对应类型,插入则将对应类型转为JSON
MySQL JSON 解析查询时,只支持JSON格式:{“name”:“Tomcat”,“age”:10},不支持:{“name”:“Tomcat”,“age”:10} 和 “{“name”:“Tomcat”,“age”:10}”

autoResultMap = true

@TableName 注解中使用 autoResultMap = true
MVC JSON 解析时,可以不用 ,
但是 MySQL JSON 解析查询的时候,如果不加,查出来为 null

JacksonTypeHandler 和 FastjsonTypeHandler

JacksonTypeHandler
可以兼容 MybatisPlus 的功能和满足 支持 MySQL JSON 解析
支持 MVC JSON 解析
支持 MySQL JSON 解析

FastjsonTypeHandler
支持 MVC JSON 解析
不支持 MySQL JSON 解析

出现的问题

方式一在XML语句使用 resultMap="BaseResultMap" 时可能会出现结果全属性为空的情况(很可能是笔者数据库字段名不规范的缘故,这里就不打算细究了)

<select id="listByComplex" resultType="com.entity.CustomerEntity">
	xxxxxxxx
    </select>

在这里插入图片描述

  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值