MyBatis Plus实体类复杂属性(Object)的插入和结果集
实体类
在实体类中
@TableName
注解内添加属性值autoResuleMap = true
,字段加@TableField
注解,value属性值添加typeHandler = JacksonTypeHandler.class
或typeHandler = 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;
}
数据库
插入
插入结果分别为
["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>