实体类JSON字段的终极转换思路
哈喽,各位代码战士们,我是Jensen,一个梦想着和大家一起在代码的海洋里遨游,顺便捡起那些散落的知识点的程序员小伙伴。
听说大家都不爱当“接码侠”,笔者在接盘别人代码之时也常意难平,我的心情大部分是这样的:
今天看看数据库JSON字段是怎么映射到代码上来的。
本文涉及技术栈:类型处理器、D3Boot。
一、都有些什么写法
1.用String映射
这种是最简单最普遍的写法,JSON不就是字符串嘛,能存能取就行了,存数据库跟存银行没什么区别,数据库存一条,银行存一“张不够花”。
前后端要用?对不起,自己解析去吧,用Json工具类,转完七七四十九遍以后,别把这个字符串玩坏就行。
完了以后,隔壁组的数据分析狮张开了她的獠牙看向你……
2.用JSONObject映射
那我用世界500强公司的com.alibaba.fastjson.JSONObject总可以了吧。
可以是可以,但麻烦是真麻烦,取元素出来还得转换成具体的类型,只能通过字符串Key取值,还得引入个fastjson包,对于没什么阿里信仰的同学可能不是那么的友好。
Hutool包也有个同类名的cn.hutool.json.JSONObject,一不小心把两个给搞混就GG了。
要是再遇到你的同类把一个实体从头传到尾,再作为DTO提供Jar包出去就……
3.自定义类型处理器
其实,在Mybatis这个主流ORM框架中,有这么一个抽象类:
org.apache.ibatis.type.BaseTypeHandler
它是 MyBatis 框架中一个非常重要的类,它提供了一个通用的基类,用于自定义类型处理器(TypeHandler)。
在 MyBatis 中,类型处理器负责在 Java 类型和 JDBC 类型之间的转换。当你想要对某种类型进行特殊的处理,或者 MyBatis 默认的类型处理器不能满足你的需求时,你可以自定义一个类型处理器。
以下是 BaseTypeHandler的一些关键点:
通过继承 BaseTypeHandler 并实现必要的方法,你可以完全控制数据在 Java 对象和数据库之间的转换过程,这为处理复杂的业务逻辑提供了灵活性。
通过类型处理器,我们可以映射成任意类型,存取数据其实没有那么的麻烦。
不错不错,就它了。