Mybatis实现存取Mysql的Json字段映射Java对象
Mybatis实现存取Mysql的Json字段映射Java对象
- 一、需求
- 二、解决方案
一、需求
在业务比较复杂的项目模块,为了应对多样化的场景,我们通常会在mysql中采用json格式来存储相应的信息。使用json格式存储数据有它的优缺点,在这里我们就不细说了,有兴趣的朋友可以去查一下。
在进行开发的过程中,我们是希望在mysql中查询出的json格式数据直接映射成java对象;而java对象也可以转换成json格式数据进行存储;在这里记录一下我们如何实现这样的需求。
二、解决方案
定义一个JsonTypeHandler类,继承于org.apache.ibatis.type.BaseTypeHandler,代码如下:
public class JsonTypeHandler<T extends Object> extends BaseTypeHandler<T> {private static final ObjectMapper mapper = new ObjectMapper();private Class<T> clazz;public JsonTypeHandler(Class<T> clazz) {if (clazz == null) throw new IllegalArgumentException("Type argument cannot be null");this.clazz = clazz;}@Overridepublic void setNonNullParameter(PreparedStatement ps, int i, T parameter, JdbcType jdbcType) throws SQLException {ps.setString(i, this.toJson(parameter));}@Overridepublic T getNullableResult(ResultSet rs, String columnName) throws SQLException {return this.toObject(rs.getString(columnName), clazz);}@Overridepublic T getNullableResult(ResultSet rs, int columnIndex) throws SQLException {return this.toObject(rs.getString(columnIndex), clazz);}@Overridepublic T getNullableResult(CallableStatement cs, int columnIndex) throws SQLException {return this.toObject(cs.getString(columnIndex), clazz);}private String toJson(T object) {try {return mapper.writeValueAsString(object);} catch (Exception e) {throw new RuntimeException(e);}}private T toObject(String content, Class<?> clazz) {if (content != null && !content.isEmpty()) {try {return (T) mapper.readValue(content, clazz);} catch (Exception e) {throw new RuntimeException(e);}} else {return null;}}static {mapper.configure(SerializationConfig.Feature.WRITE_NULL_MAP_VALUES, false);mapper.setSerializationInclusion(JsonSerialize.Inclusion.NON_NULL);}
}
用法:
入库:#{jsonDataField, typeHandler=com.tiptimes.oa.system.util.JsonTypeHandler}
出库:
<resultMap>
<result property="jsonDataField" column="json_data_field" javaType="com.xxx.MyClass" typeHandler="com.XXX.JsonTypeHandler"/>
</resultMap>
通过以上的配置就可以实现我们想要的功能,亲测有效。
Mybatis实现存取Mysql的Json字段映射Java对象相关推荐
- MySQL查询 json 字段中是否包含某个value
MySQL查询 json 字段中是否包含某个value 方法一: 1.简单版本 :查询json的key SELECT * FROM 表名 where 字段名 -> '$.json中的key' = ...
- java jsonalias_将多个JSON字段映射到单个Java字段
简介 本文中,教大家如何使用Jackson和Gson将不同的JSON字段映射到单个Java字段中. Maven依赖 为了使用Jackson和Gson库,我们需要在POM中添加以下依赖项: com.go ...
- 对象json字符串数组 java对象,java把json的字符串转换为json对象和数组
[Json--使用Json jar包实现Json字符串与Java对象或集合之间的互相转换] 1,[java将JSON字符串转换为实体类对象 @SuppressWarnings(unchecked)pu ...
- json 解析 转java对象数组对象数组对象_json字符串转java对象数组
需要引入json-lib-2.2-jdk15.jar和ezmorph-1.0.6.jar包 String itemStar = request.getParameter("itemStar& ...
- java中将json字符串_Java中JSON字符串与java对象的互换实例详解
在开发过程中,经常需要和别的系统交换数据,数据交换的格式有XML.JSON等,JSON作为一个轻量级的数据格式比xml效率要高,XML需要很多的标签,这无疑占据了网络流量,JSON在这方面则做的很好, ...
- JSON数据和Java对象的相互转换
* JSON解析器: * 常见的解析器:Jsonlib,Gson,fastjson,jackson 1. JSON转为Java对象 1. 导入jack ...
- Java中JSON字符串与java对象的互换实例详解
这篇文章主要介绍了在java中,JSON字符串与java对象的相互转换实例详解,非常不错,具有参考借鉴价值,需要的朋友可以参考下 在开发过程中,经常需要和别的系统交换数据,数据交换的格式有XML.JS ...
- Json对象与Json字符串的转化、JSON字符串与Java对象的转换
一.Json对象与Json字符串的转化 1.jQuery插件支持的转换方式: $.parseJSON( jsonstr ); //jQuery.parseJSON(jsonstr),可以将json字符 ...
- json字符串与java对象的相互转换(jackson)
1.java对象转换为json字符串 package com.chichung.json;import com.fasterxml.jackson.core.JsonProcessingExcepti ...
最新文章
- 刻意练习:LeetCode实战 -- Task05. 最接近的三数之和
- 一文详解随机一致性采样算法:RANSAC
- 未安装在此服务器场中,无法添加到该范围
- c++17(9)-多参数列表
- SAP Commerce Cloud(原Hybris) impex 里的美元(dollar $)符号
- [Nginx]nginx 配置实例-负载均衡
- 如何查看使用 Cloud Toolkit 部署应用的实时日志
- 计算机主机名称命令,怎么用dos指令修改计算机名
- [译]Vulkan教程(20)重建交换链
- xadmin与mysql数据库_django和xadmin打造后台管理系统(一)-xadmin安装及使用
- Java Web系列:Hibernate 基础
- C++标准转换运算符:reinterpret_cast
- ffmpeg加马赛克
- 【Unity3D-UGUI原理篇】(二)Canvas Scaler 缩放原理
- 把期货当现货做,专业投机大局观
- vue3 路由缓存页面
- 仅有银行转账凭证,是否可认定为民间借贷关系
- 013 基于truffle的PetShop案例
- 研究2:如何快速区分出游戏美术风格
- 傅里叶变化(一)—— 复数
热门文章
- 【代码】Go语言程序设计
- 转载:Joel Spolsky: 创业公司如何公平分配股权?
- Sql之left join(左关联)、right join(右关联)、inner join(自关联),以及笛卡儿积表的区别
- 微信公众号怎么设置下载文件
- 【水文模型】SWAT水文模型原理及数据库简介
- [免费专栏] Android安全之Android加密算法浅析
- 【复变函数与积分变换】06. 拉普拉斯变换
- db+Nacos的方式部署高可用集群模式
- IT项目管理实践经验分享
- 【层级文本分类】Constrained Sequence-to-Tree Generation for Hierarchical Text Classification