当前位置: 首页 > news >正文

mybatisplus json自动转实体类

实体类

package com.mmwzcloud.jszj.module.jszj.dal.dataobject.jszjmemberuserpaymentrecord; import com.mmwzcloud.jszj.framework.commonjszj.dto.UserPaymentRecordBizJsonDto; import com.mmwzcloud.jszj.framework.commonjszj.mybatisplustypehandler.UserPaymentRecordBizJsonTypeHandler; import lombok.*; import java.math.BigDecimal; import com.baomidou.mybatisplus.annotation.*; import com.mmwzcloud.jszj.framework.mybatis.core.dataobject.BaseDO; /** * 用户支付记录 DO * * @author 景春德 */ @TableName(value = "jszj_member_user_payment_record", autoResultMap = true) @KeySequence("jszj_member_user_payment_record_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。 @Data @EqualsAndHashCode(callSuper = true) @ToString(callSuper = true) @Builder @NoArgsConstructor @AllArgsConstructor public class JszjMemberUserPaymentRecordDO extends BaseDO { /** * ID */ @TableId private Long id; /** * 用户ID */ private Long userId; /** * payment_type 支付类型 aliPayment:支付宝 weChatPayment:微信支付 */ private String paymentType; /** * 支付订单号 */ private String outTradeNo; /** * 状态 0:已生成未支付 1:已支付 2:退款中 3:退款成功 */ private Integer state; /** * 支付金额 */ private BigDecimal money; /** * 购买的业务表名 */ private String tableName; /** * 购买的业务表id */ private Long tableId; /** * 购买的业务表字段 */ private String tableField; /** * 支付的业务,如果支付的业务没有相关表,可以使用此字段记录支付业务的类型和数据 */ @TableField(value = "biz_json", typeHandler = UserPaymentRecordBizJsonTypeHandler.class) private UserPaymentRecordBizJsonDto bizJson; }

主要是 autoResultMap = true 和 @TableField(value = "biz_json", typeHandler = UserPaymentRecordBizJsonTypeHandler.class)

json对应的实体类

package com.mmwzcloud.jszj.framework.commonjszj.dto; import lombok.Data; import java.util.Map; @Data public class UserPaymentRecordBizJsonDto { //业务类型 private String bizType; //业务数据 private Map<String,String> bizData; }

转换的方法

package com.mmwzcloud.jszj.framework.commonjszj.mybatisplustypehandler; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; import com.mmwzcloud.jszj.framework.commonjszj.dto.UserPaymentRecordBizJsonDto; import org.apache.ibatis.type.BaseTypeHandler; import org.apache.ibatis.type.JdbcType; import org.apache.ibatis.type.MappedTypes; import java.sql.CallableStatement; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; @MappedTypes(UserPaymentRecordBizJsonDto.class) public class UserPaymentRecordBizJsonTypeHandler extends BaseTypeHandler<UserPaymentRecordBizJsonDto> { private static final ObjectMapper objectMapper = new ObjectMapper(); @Override public void setNonNullParameter(PreparedStatement ps, int i, UserPaymentRecordBizJsonDto parameter, JdbcType jdbcType) throws SQLException { try { String json = objectMapper.writeValueAsString(parameter); ps.setString(i, json); } catch (JsonProcessingException e) { throw new SQLException("Failed to convert UserPaymentRecordBizJsonDto to JSON", e); } } @Override public UserPaymentRecordBizJsonDto getNullableResult(ResultSet rs, String columnName) throws SQLException { return parseJson(rs.getString(columnName)); } @Override public UserPaymentRecordBizJsonDto getNullableResult(ResultSet rs, int columnIndex) throws SQLException { return parseJson(rs.getString(columnIndex)); } @Override public UserPaymentRecordBizJsonDto getNullableResult(CallableStatement cs, int columnIndex) throws SQLException { return parseJson(cs.getString(columnIndex)); } private UserPaymentRecordBizJsonDto parseJson(String json) { if (json == null || json.trim().isEmpty()) { return null; } try { return objectMapper.readValue(json, UserPaymentRecordBizJsonDto.class); } catch (JsonProcessingException e) { throw new RuntimeException("Failed to parse JSON to UserPaymentRecordBizJsonDto: " + json, e); } } }
http://www.jsqmd.com/news/309826/

相关文章:

  • 计算机视觉赋能AI原生应用领域的未来前景
  • 多线程开篇记录几个例子
  • 分享人人租监管机上门回收方法,人人租监管机回收价格
  • 1.28
  • Day31-20260127
  • 高纯氢氧化镁生产厂家,高纯度低杂质更靠谱!
  • 上市大模型企业数据基础设施的选择:MiniMax 基于阿里云 SelectDB 版,打造全球统一AI可观测中台
  • 企业培训系统源码选型指南:自研、二开还是成品系统源码?
  • AI+企业培训系统源码:下一代内训平台长什么样?
  • 计算机毕业设计springboot高校毕业设计信息系统 基于SpringBoot的高校毕业设计全过程管理与协同平台 高校毕业设计数字化管理与在线指导系统
  • 计算机毕业设计springboot高校毕业生就业岗位推荐系统 基于SpringBoot的高校毕业生就业智能匹配与双向选择平台 高校毕业生就业信息数字化管理与职业推荐服务系统
  • 大模型开发|如何解决 AttributeError: ‘Qwen2ForCausalLM‘ object has no attribute ‘chat‘ 问题
  • Python基础调试|如何解决 ModuleNotFoundError: No module named ‘re‘ 问题
  • 云原生运维实战:阿里云 ECS 服务器安全加固与性能调优指南
  • 告别天价电费!安科瑞AESB-125/261-L储能一体机,工商业用户的“超级充电宝”
  • Antigravity Skills 全局安装与配置指南
  • 从零学习Kafka:集群架构和基本概念
  • 化繁为简,一库统揽:金仓数据库以“一体化替代”战略重构企业数据核心
  • WPS教育纯净版
  • 通用浏览器多开CK登录器
  • Anthropic发布Claude AI全新宪法文件强化安全伦理框架
  • LoViT:用于手术阶段识别的长视频Transformer/文献速递-基于人工智能的医学影像技术
  • 抖音小店如何邀约精准的达人帮我们带货?这套实战指南请收好!
  • Intel挖角Qualcomm资深专家领导GPU项目
  • Rust 1.93更新musl库增强网络功能
  • 分布式云网络成为AI时代应用的新WAN
  • 高纯氢氧化镁生产厂家|适配橡塑、环保、电子多场景!
  • 英伟达在AI天气预报领域选择开源路线
  • 人人租全新未拆封的手机是不是监管机
  • 互联网医院:重塑“养老居家医养”新格局