MyBatis-Plus字段类型处理器使用

说明:之前介绍过手动写一个数据库字段类型处理器,本文介绍 MyBatis-Plus 自带的封装好了的字段类型处理器使用。

注解方式

如下,是一个 DO 对象,其中 address 字段,在数据库中是 json 类型,准确的说,是 json 数组类型

java 复制代码
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;

import java.io.Serializable;

@Data
@TableName(value = "tb_users")
public class UserDO implements Serializable {

    @TableId
    private Long id;

    /**
     * 用户名
     */
    private String username;

    /**
     * 密码
     */
    private String password;

    /**
     * 地址
     */
    private String address;
}

数据如下:

这样的数据,可以直接使用 String 类型接收,查询如下:

像封装到对象里,可使用 MyBatis-Plus 的 TableField() 注解,如下:

java 复制代码
    /**
     * 地址
     */
    @TableField(typeHandler = JacksonTypeHandler.class)
    private List<AddressDTO> address;

需要注意的是,类上的 @TableName() 注解需添加自动映射设置,不然没有效果

另外,封装的 AddressDTO 对象,对应的构造方法,setter/getter 方法,也不要缺,如下:

java 复制代码
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.io.Serializable;

@Data
@AllArgsConstructor
@NoArgsConstructor
public class AddressDTO implements Serializable {

    /**
     * 城市
     */
    private String city;

    /**
     * 国家
     */
    private String country;

    /**
     * 详细地址
     */
    private String detail;
}

查询,可见数据被封装到 DTO 对象里

XML方式

如果是在 Mapper.xml 中手写的 SQL,就更方便了,在 ResultMap 标签中指定 MyBatis-Plus 中对应的字段类型处理器即可,如下:

可能封装进来(类上的注解和自动映射的配置可以去掉了)

另外

除了将 json 数组类型的数据,封装到一个对象集合里,MyBatis-Plus 还提供了其他几个字段类型处理器,翻一下源码,可以看到下面这几个处理器

也可以直接封装到 Fastjson 里,如 JSONArray

java 复制代码
    /**
     * 地址
     */
    @TableField(typeHandler = Fastjson2TypeHandler.class)
    private JSONArray address;

看,还省的创建 DTO 了

相关推荐
AC赳赳老秦9 小时前
时间开销自动统计:OpenClaw 记录工作任务时长、分析时间分配、给出优化建议
java·大数据·开发语言·python·自动化·deepseek·openclaw
掘金者阿豪9 小时前
上线前能跑,上线后挂了,三个隐性的SQL陷阱
后端
TDengine (老段)10 小时前
昆仑数智选择 TDengine TSDB,提升页岩气生产运行可视化与精细化管理能力
大数据·数据库·物联网·时序数据库·tdengine·涛思数据
用户83562907805110 小时前
如何使用 Python 为 PDF 添加和管理图层
后端·python
陆水A10 小时前
【问数系统】SQL跑对了图表却空了?打通问数系统最后1公里的3个API坑
大数据·数据库·自然语言处理·big data·etl工程师
名侦探72210 小时前
构建 Agent 的五大难点与解决方案
java·大数据·人工智能
Demons_kirit10 小时前
图库原理(以阿里云OSS为案例)
java·阿里云·云计算
SimonKing10 小时前
那个号称"对标 Spring"的国产框架 Solon,到底行不行?
java·后端·程序员
Lethehong10 小时前
飞算Java:从需求梳理到风险闭环,搭建云盾企业信息安全与权限管理平台
java·开发语言
霸道流氓气质10 小时前
SpringBoot中使用字典驱动的动态路由示例
java·spring boot·后端