MybatisPlus怎么自定义TypeHandler映射JSON类型为List
发表于:2025-01-19 作者:千家信息网编辑
千家信息网最后更新 2025年01月19日,这篇文章将为大家详细讲解有关MybatisPlus怎么自定义TypeHandler映射JSON类型为List,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。自定义Ty
千家信息网最后更新 2025年01月19日MybatisPlus怎么自定义TypeHandler映射JSON类型为List
这篇文章将为大家详细讲解有关MybatisPlus怎么自定义TypeHandler映射JSON类型为List,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。
自定义TypeHandler映射JSON类型为List
1. 实体类
这里只展示需要映射的字段,分别在所需映射的字段和实体类上添加注解。
@Data@TableName(value = "report", autoResultMap = true)public class Report { private static final long serialVersionUID = 1L; @ApiModelProperty("id") @TableId(value = "id", type = IdType.AUTO) private Integer id; @ApiModelProperty("报名信息") @TableField(typeHandler = ReportUserListTypeHandler.class) private ListreportInfo; }
2. ListTypeHandler
提供一个 JSONArray 转换为 Java List集合的处理器
import cn.hutool.core.collection.CollUtil;import cn.hutool.core.util.StrUtil;import com.alibaba.fastjson.JSON;import com.alibaba.fastjson.TypeReference;import org.apache.ibatis.type.BaseTypeHandler;import org.apache.ibatis.type.JdbcType;import org.apache.ibatis.type.MappedJdbcTypes;import org.apache.ibatis.type.MappedTypes; import java.sql.CallableStatement;import java.sql.PreparedStatement;import java.sql.ResultSet;import java.sql.SQLException;import java.util.ArrayList;import java.util.List; @MappedJdbcTypes(JdbcType.VARBINARY)@MappedTypes({List.class})public abstract class ListTypeHandlerextends BaseTypeHandler > { @Override public void setNonNullParameter(PreparedStatement ps, int i, List
parameter, JdbcType jdbcType) throws SQLException { String content = CollUtil.isEmpty(parameter) ? null : JSON.toJSONString(parameter); ps.setString(i, content); } @Override public List getNullableResult(ResultSet rs, String columnName) throws SQLException { return this.getListByJsonArrayString(rs.getString(columnName)); } @Override public List getNullableResult(ResultSet rs, int columnIndex) throws SQLException { return this.getListByJsonArrayString(rs.getString(columnIndex)); } @Override public List getNullableResult(CallableStatement cs, int columnIndex) throws SQLException { return this.getListByJsonArrayString(cs.getString(columnIndex)); } private List getListByJsonArrayString(String content) { return StrUtil.isBlank(content) ? new ArrayList<>() : JSON.parseObject(content, this.specificType()); } /** * 具体类型,由子类提供 * * @return 具体类型 */ protected abstract TypeReference > specificType(); }
3. ReportUserListTypeHandler
由具体的子类提供List集合泛型类型
import com.alibaba.fastjson.TypeReference;import com.hanku.business.model.ReportUser; import java.util.List; public class ReportUserListTypeHandler extends ListTypeHandler{ @Override protected TypeReference > specificType() { return new TypeReference
>() { }; } }
4. Java 泛型
如果在 ListTypeHandler 类中直接提供 TypeReference> 这种类型,那就等效于TypeReference
> 这种类型,后续 fastjson 在转换时无法确定具体的 Java 类型,转换后的类型最终就会是 List
自定义TypeHandler的使用笔记
可通过自定义的TypeHandler实现某个属性在插入数据库以及查询时的自动转换,本例中是要将Map类型的属性转化成CLOB,然后存入数据库。由于是复杂的Map,mp自带的json转换器会丢失部分信息。
类型转换器还可以通过注解配置 java类型和jdbc类型
@MappedTypes
:注解配置 java 类型@MappedJdbcTypes
:注解配置 jdbc 类型
定义
@Slf4j@MappedTypes({Object.class})@MappedJdbcTypes(JdbcType.VARCHAR)public class WeightListTypeHandler extends AbstractJsonTypeHandler
使用
注意@TableName 注解 autoResultMap 属性
@Data@NoArgsConstructor@TableName(value = "mix_target",autoResultMap = true)public class MixTarget extends Model{ @TableId(value = "id", type = IdType.AUTO) private Long id; /** *指标描述 */ @TableField("description") private String description; /** * 指标名 */ @TableField("name") private String name; /** * 对应属性名 */ @TableField("property_name") private String propertyName; /** * 起始点类型 */ @TableField("source_type") private String sourceType; /** * 属性对应权值列表 * key 属性名 value指定条件下的权值 */ @TableField(value = "weight_list",typeHandler = WeightListTypeHandler.class,jdbcType = JdbcType.CLOB) private Map > weightList; /** * 运行状态 * 0 新建未运行 * 1 运行中 * 2 已运行 成功 * 3 已运行 失败 */ @TableField("status") private Integer status; /** * 是否可用 * 1 true * 0 false */ @TableField("enable") private Integer enable; @TableField("create_time") private LocalDateTime createTime;}
关于"MybatisPlus怎么自定义TypeHandler映射JSON类型为List"这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。
类型
属性
注解
运行
篇文章
配置
信息
子类
字段
实体
数据
数据库
更多
转换器
不错
复杂
实用
成功
内容
可以通过
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
数据库技术包含哪些
阿里巴巴服务器中心
移动端网络安全可靠吗
软件开发模式可以结合吗
青年是网络安全
在线网络技术开发售价
海南水果蔬菜配送软件开发
网络安全单位名单
重庆苹果手机软件开发费用多少
新畅网络技术
石河子大学曹传东web服务器
数据库只存日期的年
兰州网络技术怎么样
简述网络安全常识
数据库中怎么查看临时表
主题数据库地点分布
ns暗黑3数据库
edis数据库应用
币印智能服务器
阿里云数据库怎么建表
返回值数据库
兖州软件开发地址
河南全威互联网信息科技
ps4 重建数据库
武汉大学国家网络安全学院传真
基础组件软件开发工程师
物理网络安全设计
建立台资企业数据库
服务器要装什么软件
南水北调网络安全采购项目