尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

开发中常用问题记录

开发中常用问题记录
📅 发布时间:2026/7/8 2:59:32

MyBatis-Plus 插入数据库 JSON 字段完整方案(PostgreSQL / MySQL 两种主流)

一、两种数据库区分

  1. MySQL:字段类型json / jsonb
  2. PostgreSQL:字段类型json / jsonb(你项目用PG)
    核心:自定义类型处理器JacksonTypeHandler,自动 Java对象 ↔ 数据库JSON字符串

二、通用步骤(PG适用)

1. 数据库表字段示例

-- 附件扩展信息,存影像多波段、坐标、元数据杂项ALTERTABLEt_file_attachmentADDCOLUMNext_info JSONB;

2. 实体类

importcom.baomidou.mybatisplus.annotation.TableField;importcom.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler;importlombok.Data;importjava.time.LocalDateTime;importjava.util.Map;@DatapublicclassFileAttachment{privateLongid;privateStringoriginalFileName;privateStringfilePath;privateStringsensingTime;/** * 扩展JSON:波段信息、分辨率、四角坐标等 * typeHandler = JacksonTypeHandler.class 自动序列化/反序列化 */@TableField(typeHandler=JacksonTypeHandler.class)privateMap<String,Object>extInfo;// 也可以自定义实体接收JSON// @TableField(typeHandler = JacksonTypeHandler.class)// private TiffExtInfo extInfo;}

3. 自定义JSON实体(可选,替代Map)

importlombok.Data;importjava.math.BigDecimal;@DatapublicclassTiffExtInfo{// 分辨率GSDprivateBigDecimalgsd;// 波段数量privateIntegerbandCount;// 影像宽高privateIntegerwidth;privateIntegerheight;// 四角坐标数组privatedouble[]bounds;}

三、配置全局扫描TypeHandler(无需每个字段写注解)

application.yml

mybatis-plus:configuration:# 开启驼峰转下划线map-underscore-to-camel-case:truetype-handlers-package:com.xxx.xxx.handler

四、插入使用示例

// 1. Map方式FileAttachmentattachment=newFileAttachment();attachment.setOriginalFileName("scene.tif");attachment.setSensingTime("2026-07-07T02:10:30Z");Map<String,Object>ext=newHashMap<>();ext.put("gsd",0.8);ext.put("bandCount",4);ext.put("width",10000);ext.put("height",8000);attachment.setExtInfo(ext);// MP直接插入,自动序列化为jsonb存入PGattachmentService.save(attachment);
// 2. 自定义实体对象方式TiffExtInfotiffExt=newTiffExtInfo();tiffExt.setGsd(newBigDecimal("0.8"));tiffExt.setBandCount(3);tiffExt.setBounds(newdouble[]{116.3,39.9,116.5,40.1});attachment.setExtInfo(tiffExt);attachmentService.save(attachment);

五、查询自动转对象

FileAttachmentfile=attachmentService.getById(1L);Map<String,Object>extMap=file.getExtInfo();// 或强转自定义实体// TiffExtInfo info = file.getExtInfo();

六、常见坑(PG重点)

  1. 报错:无法转换类型 text to jsonb
    • 实体必须加@TableField(typeHandler = JacksonTypeHandler.class)
    • 或全局注册typeHandler包
  2. 更新JSON局部字段(MP Lambda)
Map<String,Object>newExt=newHashMap<>();newExt.put("gsd",1.0);attachmentService.lambdaUpdate().set(FileAttachment::getExtInfo,newExt).eq(FileAttachment::getId,1L).update();
  1. JSONB条件查询(PG特有)
// 查询gsd=0.8的影像LambdaQueryWrapper<FileAttachment>wrapper=Wrappers.lambdaQuery();wrapper.apply("ext_info ->> 'gsd' = '0.8'");List<FileAttachment>list=attachmentService.list(wrapper);

七、Maven依赖(必须有jackson)

<dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.5.3.1</version></dependency><!-- jackson序列化依赖,否则JacksonTypeHandler失效 --><dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-databind</artifactId></dependency>

相关新闻

  • 系统门窗行业主流品牌有哪些?2026 行业盘点
  • Vivado 2024.1 时序约束实战:从 0 到 1 完成 100MHz FIFO 异步时钟组约束
  • 3D文件格式解析:建筑师与设计师指南

最新新闻

  • BOKBO:面向K样本的VLA模型可验证拒判方法
  • 智慧校园后勤革新:智能锁人证核验与通断电联动管控落地方案
  • 效率直接起飞 2026 最新降AIGC网站测评与推荐
  • 双活数据中心 RPO 配置多少合理?RPO0 与 5 分钟数据丢失标准解读
  • 重新掌控Windows视觉体验:No!! MeiryoUI字体自定义工具深度解析
  • 3D格式转换之Blender工程文件转换GLB格式技术文档

日新闻

  • PROPKA 3深度解析:蛋白质pKa预测的实战指南与算法原理
  • 微信小程序 globalData 监听:基于 Object.defineProperty 的 3 种实现方案对比
  • MySQL 8.0 数据清洗实战:3类异常值识别与 UPDATE/DELETE 批量处理

周新闻

  • 基于YOLOv12的番茄成熟度智能检测系统开发
  • 终极RimWorld模组管理指南:用RimSort告别模组冲突烦恼
  • AI Agent框架开发:从理论到实践的完整指南

月新闻

  • 2026年6月公司网站搭建最新热门渠道测评:四大低成本/零代码平台对比+避坑
  • 【Linux】Linux arm 编译QT程序,出现expected “}“报错
  • 【MATLAB例程】四基站二维AOA定位与距离辅助增强对比仿真。基于角度观测和测距修正的固定目标平面定位精度分析

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号