MyBatis-Plus12:JSON处理器
一、JSON 类型 在 Mysql中的使用MySQL 5.7.8 版本开始就原生支持 JSON 类型了。1-1、基本用法建表时直接用JSON作为字段类型CREATE TABLE orders ( id INT PRIMARY KEY AUTO_INCREMENT, user_id INT, extra JSON -- JSON 类型字段 );插入数据INSERT INTO orders (user_id, extra) VALUES (1, {color: red, size: XL});1-2、常用的 JSON 函数查询 JSON 中的某个字段-- - 返回 JSON 格式- 返回纯文本 SELECT extra-$.color FROM orders; -- 返回 red带引号 SELECT extra-$.color FROM orders; -- 返回 red不带引号修改 JSON 中的某个字段UPDATE orders SET extra JSON_SET(extra, $.color, blue) WHERE id 1;按 JSON 字段的值来查询SELECT * FROM orders WHERE extra-$.color red;1-3、和直接存 VARCHAR 字符串的区别虽然你插入时写的是 JSON 字符串但 MySQL 内部会把它解析并转换成二进制格式存储。对比项JSON 类型VARCHAR 存 JSON 字符串存储格式二进制优化过的普通字符串格式校验✅ 插入时自动校验格式合法性❌ 不校验存什么都行查询字段✅ 支持--直接查内部字段❌ 只能整体查或用字符串函数索引✅ 支持对 JSON 内部字段建虚拟列索引❌ 不支持性能读取内部字段更快每次都要解析整个字符串所以本质上存的是二进制只是展示给你看的时候会格式化成 JSON 字符串的样子。1-4、MySQL 内置的 JSON 操作函数JSON_SETJSON_SET是 MySQL 内置的 JSON 操作函数作用是修改 JSON 中某个字段的值如果字段不存在就新增存在就覆盖。1、语法JSON_SET(json字段, 路径, 新值, 路径, 新值, ...)支持一次修改多个字段。2、举个例子假设extra字段当前值是{color: red, size: XL}修改已有字段UPDATE orders SET extra JSON_SET(extra, $.color, blue); -- 结果{color: blue, size: XL}新增不存在的字段UPDATE orders SET extra JSON_SET(extra, $.price, 99); -- 结果{color: red, size: XL, price: 99}同时修改多个UPDATE orders SET extra JSON_SET(extra, $.color, blue, $.size, M); -- 结果{color: blue, size: M}3、相似函数对比函数作用JSON_SET有则覆盖无则新增JSON_INSERT只新增已存在的字段不覆盖JSON_REPLACE只覆盖不存在的字段不新增JSON_REMOVE删除某个字段大多数情况用JSON_SET就够了因为它最灵活。二、在 MyBatis-Plus 中使用Java 实体类中对应字段用String或自定义对象接收需要加json类型处理器。【注意】没有application.yml全局配置2-1、完整示例1、定义json类型字段对应的java类Data NoArgsConstructor AllArgsConstructor(staticName of) public class JsonInfo { private String color; private String size; }2、在对应的table entity类上添加两个注解3、postman测试1查询2插入三、TableName(autoResultMap true) 详解这是MyBatis-Plus框架中的注解属性主要用于处理特殊类型字段的映射问题。【备注】ResultMap是 MyBatis 中用于定义数据库查询结果与 Java 对象之间映射关系的核心配置。数据库查询结果 (ResultSet) ↓ ResultMap (映射规则) ↓ Java 对象 (POJO/Entity)简单说ResultMap 告诉 MyBatis如何把数据库的列映射到 Java 对象的属性ResultMap vs resultType对比项resultTyperesultMap配置方式自动映射手动配置映射规则适用场景字段名属性名字段名≠属性名/关联查询/类型转换灵活性低高代码量少多TypeHandler不支持✅ 支持·3-1、核心含义属性默认值作用autoResultMapfalse是否自动构建 resultMap 并使用 resultMap 映射当设置为true时MyBatis-Plus 会自动生成 ResultMap支持自定义类型处理器TypeHandler生效。3-2、典型使用场景场景一MySQL JSON 类型字段最常见当数据库字段是JSON 类型实体类属性是Java 对象/集合时// 实体类 TableName(value users, autoResultMap true) public class User { TableId private Long id; // JSON 字段需要类型转换 TableField(typeHandler JacksonTypeHandler.class) private UserInfo info; TableField(typeHandler JacksonTypeHandler.class) private ListString tags; }# application.yml 配置 mybatis-plus: type-handlers-package: com.example.demo.handler type-aliases-package: com.example.demo.entity场景二自定义 TypeHandler// 自定义类型处理器 public class EncryptTypeHandler extends BaseTypeHandlerString { Override public void setParameter(PreparedStatement ps, int i, String parameter, JdbcType jdbcType) { ps.setString(i, encrypt(parameter)); } Override public String getNullableResult(ResultSet rs, String columnName) { return decrypt(rs.getString(columnName)); } // ... 其他方法 }// 实体类 TableName(value users, autoResultMap true) public class User { TableField(typeHandler EncryptTypeHandler.class) private String phone; // 数据库中加密存储 }3-3、注意事项问题说明必须配合 TypeHandler只设置autoResultMaptrue不够字段上还需加TableField(typeHandler...)XML 映射文件如果使用 XML需要在 resultMap 中指定typeHandler性能影响开启后会生成额外 ResultMap轻微影响性能MP 版本3.3.1 版本支持较好3-4、完整示例// 实体类 TableName(value articles, autoResultMap true) Data public class Article { TableId private Long id; private String title; // JSON 字段存储为对象 TableField(typeHandler JacksonTypeHandler.class) private ArticleContent content; // JSON 字段存储为列表 TableField(typeHandler JacksonTypeHandler.class) private ListString tags; }// JSON 对象 Data public class ArticleContent { private String text; private String coverImage; private Integer wordCount; }// Mapper 接口 Mapper public interface ArticleMapper extends BaseMapperArticle { // 自定义查询也需要 ResultMap 支持 Select(SELECT * FROM articles WHERE id #{id}) Article selectDetail(Long id); }3-5、什么时候需要设置情况是否需要普通字段映射❌ 不需要数据库 JSON → Java 对象✅需要数据库 JSON → Java 集合✅需要使用自定义 TypeHandler✅需要字段加密/脱敏处理✅需要总结autoResultMap true ↓ 让 MyBatis-Plus 自动生成 ResultMap ↓ 使 TableField(typeHandler ...) 生效 ↓ 实现 数据库特殊类型 ↔ Java 对象 的转换简单说处理 JSON 字段或自定义类型转换时必须开启这个选项

相关新闻

经专业测评筛选的9款AI降重工具,采用NLP深度改写技术,确保输出内容符合学术规范要求

经专业测评筛选的9款AI降重工具,采用NLP深度改写技术,确保输出内容符合学术规范要求

每到毕业季,最让人头疼的就是论文查重了。辛辛苦苦写的论文,一查重竟然高达40%,那种绝望感只有经历过的人才懂。传统的降重方法又费时又费力,改来改去还可能把专业术语都改没了。 好在现在有了AI降重工具,真正实现了“…

2026/7/4 3:03:59 阅读更多 →
传统降重太耗时?这9个AI网站10秒完成高质量改写,语义保留度超95%,效率提升20倍

传统降重太耗时?这9个AI网站10秒完成高质量改写,语义保留度超95%,效率提升20倍

每到毕业季,最让人头疼的就是论文查重了。辛辛苦苦写的论文,一查重竟然高达40%,那种绝望感只有经历过的人才懂。传统的降重方法又费时又费力,改来改去还可能把专业术语都改没了。 好在现在有了AI降重工具,真正实现了“…

2026/5/17 5:47:32 阅读更多 →
论文查重总不过?试试这9个AI降重神器,智能改写不改变原意,学生党科研人员必备工具推荐

论文查重总不过?试试这9个AI降重神器,智能改写不改变原意,学生党科研人员必备工具推荐

毕业季最令人困扰的问题莫过于论文查重,许多同学精心撰写的论文在查重时重复率超过40%,这种挫败感只有亲历者才能体会。传统的人工降重方式不仅耗时耗力,还可能影响论文的专业性和准确性。如今,借助AI降重工具可以高效解决这一难题…

2026/5/17 5:47:32 阅读更多 →

最新新闻

AMD Ryzen调试工具SMUDebugTool:5步解锁处理器隐藏性能

AMD Ryzen调试工具SMUDebugTool:5步解锁处理器隐藏性能

AMD Ryzen调试工具SMUDebugTool:5步解锁处理器隐藏性能 【免费下载链接】SMUDebugTool A dedicated tool to help write/read various parameters of Ryzen-based systems, such as manual overclock, SMU, PCI, CPUID, MSR and Power Table. 项目地址: https://g…

2026/7/6 6:20:52 阅读更多 →
如何在FGO中实现自动化战斗:Fate/Grand Automata完整技术指南

如何在FGO中实现自动化战斗:Fate/Grand Automata完整技术指南

如何在FGO中实现自动化战斗:Fate/Grand Automata完整技术指南 【免费下载链接】FGA Auto-battle app for F/GO Android 项目地址: https://gitcode.com/gh_mirrors/fg/FGA Fate/Grand Automata(FGA)是一款专为《Fate/Grand Order》玩家…

2026/7/6 6:18:51 阅读更多 →
绝对真理的不可动摇性与当代学术泡沫——基于哥德尔定理、皮亚诺公理及科学哲学的综合批判

绝对真理的不可动摇性与当代学术泡沫——基于哥德尔定理、皮亚诺公理及科学哲学的综合批判

绝对真理的不可动摇性与当代学术泡沫——基于哥德尔定理、皮亚诺公理及科学哲学的综合批判摘要:本文以“绝对真理”(如算术基本事实“112”)为锚点,系统检视当代西方学术主流中两类“软科学”现象:一类是形式主义公理化…

2026/7/6 6:16:50 阅读更多 →
AI商业洞察动态简报(2026.07.05)

AI商业洞察动态简报(2026.07.05)

第1条:快手可灵AI完成30亿美元融资,估值达150亿美元商业价值:可灵AI成立于2023年,是快手旗下的AI视频生成模型业务。本轮融资创下全球视频大模型公司最大额融资纪录,投资者涵盖产业资本(腾讯、阿里云、百度…

2026/7/6 6:16:50 阅读更多 →
吾爱大佬出品,可离线的识别工具!一键提取图片文字、图片表格、PDF文字!

吾爱大佬出品,可离线的识别工具!一键提取图片文字、图片表格、PDF文字!

软件获取 OCR识别软件 使用提示: 1、 打开软件后,点击"截图识别"即可框选识别区域。 2、点击"导入文件"可以选择图片或 PDF。 3、"设置"里可以设置保存目录、自动复制、自动保存、HTTP服务、自定义API 等。 4、"…

2026/7/6 6:14:50 阅读更多 →
鸿蒙新特性:CalendarPicker 日历组件详解——构建一个日程管理应用

鸿蒙新特性:CalendarPicker 日历组件详解——构建一个日程管理应用

日历是时间管理类应用中最高频的交互界面之一。HarmonyOS NEXT ArkUI 提供了 CalendarPicker 组件,以月视图网格的方式展示完整日历,支持年份月份滑动切换、日期选中高亮和自定义日期范围。配合事件数据,可以轻松构建日程管理、酒店预订、排班…

2026/7/6 6:14:50 阅读更多 →

日新闻

H2 与 MySQL 单元测试兼容性:5 个关键 SQL 语句差异与规避方案

H2 与 MySQL 单元测试兼容性:5 个关键 SQL 语句差异与规避方案

H2与MySQL单元测试兼容性:5个关键SQL语句差异与规避方案1. 单元测试中的数据库兼容性挑战在Java开发领域,单元测试是保证代码质量的重要环节。当应用涉及数据库操作时,测试环境的搭建往往成为开发者的痛点。H2数据库因其轻量级、内存模式和快…

2026/7/6 0:01:17 阅读更多 →
Windows任务栏终极清理指南:用RBTray一键隐藏窗口到系统托盘

Windows任务栏终极清理指南:用RBTray一键隐藏窗口到系统托盘

Windows任务栏终极清理指南:用RBTray一键隐藏窗口到系统托盘 【免费下载链接】rbtray A fork of RBTray from http://sourceforge.net/p/rbtray/code/. 项目地址: https://gitcode.com/gh_mirrors/rb/rbtray 你是否厌倦了Windows任务栏上密密麻麻的图标&…

2026/7/6 0:01:17 阅读更多 →
Visual C++ 运行时库一键安装终极指南:告别DLL缺失烦恼

Visual C++ 运行时库一键安装终极指南:告别DLL缺失烦恼

Visual C 运行时库一键安装终极指南:告别DLL缺失烦恼 【免费下载链接】vcredist AIO Repack for latest Microsoft Visual C Redistributable Runtimes 项目地址: https://gitcode.com/gh_mirrors/vc/vcredist 你是否曾经遇到过这样的情况:下载了…

2026/7/6 0:05:19 阅读更多 →

周新闻

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱,支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools …

2026/7/5 0:03:34 阅读更多 →
威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型的陌生现状在忙碌疲惫的一天里,参与了关于混合后量子密码学的讨论,应付端点攻击找茬的人,还参与留言板讨论后,发现“威胁模型”对多数人仍是陌生概念,且多被当作时髦用语。有趣的相关画作有一幅由 Embyr 创作的…

2026/7/5 0:03:34 阅读更多 →
渗透测试入门指南:从零基础到实战环境搭建

渗透测试入门指南:从零基础到实战环境搭建

1. 从“看热闹”到“入门”:我理解的渗透测试到底是什么?每次看到新闻里说某个大公司的数据被“黑”了,或者某个网站被攻击导致服务瘫痪,你是不是和我一样,心里会冒出两个念头:一是“这黑客真厉害”&#x…

2026/7/5 0:07:38 阅读更多 →

月新闻