MyBatisPlus自定義JsonTypeHandler實(shí)現(xiàn)自動(dòng)轉(zhuǎn)化JSON問(wèn)題
背景
在項(xiàng)目中使用了Mybatis-Plus框架,調(diào)用了Mapper層的 insert()
如下所示,DingRobotMsg對(duì)象 的屬性包含了其它的對(duì)象(Text、Content)
數(shù)據(jù)庫(kù)表字段里有與之對(duì)應(yīng)的字段,類(lèi)型為json
@Service
public class DingRobotMsgServiceImpl extends ServiceImpl<DingRobotMsgMapper, DingRobotMsg> implements IDingRobotMsgService {
@Autowired
private DingRobotMsgMapper dingRobotMsgMapper;
@Override
public void insertRobotMsg(DingRobotMsg dingRobotMsg) {
// 新增
dingRobotMsg.setState("1");
if (dingRobotMsg.getMsgtype().equals("text") || dingRobotMsg.getMsgtype().equals("file")) {
dingRobotMsgMapper.insert(dingRobotMsg);
} else {
// TODO: 類(lèi)型錯(cuò)誤!
}
}
}@Data
@TableName("t_dingtalk_recemsg")
public class DingRobotMsg {
@TableId(value = "id", type = IdType.AUTO)
private Long id;
@TableField(value = "msgtype")
private String msgtype;
private Content content;
private Text text;
// ...
}這種情況,我們?nèi)绾卧诓辉黾訕I(yè)務(wù)邏輯(數(shù)據(jù)處理)的情況下實(shí)現(xiàn)數(shù)據(jù)庫(kù)的插入操作呢?
JsonTypeHandler
有的對(duì)象字段需要存儲(chǔ)為Json,可以直接轉(zhuǎn)成Json賦值后再保存。
也可以通過(guò)Mybatis的TypeHandler自動(dòng)處理。
通用 JsonTypeHandler 工具類(lèi)
/**
* 對(duì)象字段轉(zhuǎn)存為Json類(lèi)型
* @param <T>
*/
@MappedTypes({Text.class, Content.class})
public class JsonTypeHandler<T> extends BaseTypeHandler<T> {
private final Class<T> type;
public JsonTypeHandler(Class<T> type) {
if (type == null) {
throw new IllegalArgumentException("Type argument cannot be null");
}
this.type = type;
}
@Override
public void setNonNullParameter(PreparedStatement ps, int i, T parameter, JdbcType jdbcType) throws SQLException {
// 將對(duì)象轉(zhuǎn)換為JSON字符串并設(shè)置到PreparedStatement中
ps.setString(i, JSON.toJSONString(parameter));
}
@Override
public T getNullableResult(ResultSet rs, String columnName) throws SQLException {
// 從ResultSet中獲取JSON字符串并轉(zhuǎn)換為指定類(lèi)型的對(duì)象
String jsonString = rs.getString(columnName);
return JSON.parseObject(jsonString, type);
}
@Override
public T getNullableResult(ResultSet rs, int columnIndex) throws SQLException {
// 從ResultSet中獲取JSON字符串并轉(zhuǎn)換為指定類(lèi)型的對(duì)象
String jsonString = rs.getString(columnIndex);
return JSON.parseObject(jsonString, type);
}
@Override
public T getNullableResult(CallableStatement cs, int columnIndex) throws SQLException {
// 從CallableStatement中獲取JSON字符串并轉(zhuǎn)換為指定類(lèi)型的對(duì)象
String jsonString = cs.getString(columnIndex);
return JSON.parseObject(jsonString, type);
}
}JsonTypeHandler 的使用
在entry對(duì)象的字段上面加上下面的注解即可!
@TableField(typeHandler = JsonTypeHandler.class) private Content content; @TableField(typeHandler = JsonTypeHandler.class) private Text text;
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
- MyBatis自定義TypeHandler實(shí)現(xiàn)字段加密解密
- MyBatis類(lèi)型處理器TypeHandler的作用及說(shuō)明
- MyBatis中TypeHandler的使用教程詳解
- MyBatis-Plus?中?typeHandler?的使用實(shí)例詳解
- SpringBoot中MyBatis使用自定義TypeHandler的實(shí)現(xiàn)
- 解決Mybatis-plus自定義TypeHandler查詢(xún)映射結(jié)果一直為null問(wèn)題
- Mybatis中TypeHandler使用小結(jié)
- Mybatis的TypeHandler實(shí)現(xiàn)數(shù)據(jù)加解密詳解
- Mybatis中自定義TypeHandler處理枚舉的示例代碼
- MyBatis自定義TypeHandler如何解決字段映射問(wèn)題
- MyBatis中TypeHandler基本用法與示例
相關(guān)文章
SpringBoot中公共字段自動(dòng)填充的常用技巧
這篇文章主要為大家詳細(xì)介紹了SpringBoot中公共字段自動(dòng)填充的幾個(gè)常用技巧,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2025-10-10
mybatis?plus配置自動(dòng)create_time和update_time方式
在處理數(shù)據(jù)時(shí),注意時(shí)間類(lèi)型的轉(zhuǎn)換非常重要,不同編程環(huán)境和數(shù)據(jù)庫(kù)對(duì)時(shí)間數(shù)據(jù)的處理方式各異,因此在數(shù)據(jù)遷移或日常處理中需謹(jǐn)慎處理時(shí)間格式,個(gè)人經(jīng)驗(yàn)表明,了解常用的時(shí)間轉(zhuǎn)換函數(shù)和方法能有效避免錯(cuò)誤,提高工作效率,希望這些經(jīng)驗(yàn)?zāi)転榇蠹規(guī)?lái)幫助2024-09-09
Mybatis實(shí)現(xiàn)增刪改查(CRUD)實(shí)例代碼
MyBatis 是支持普通 SQL 查詢(xún),存儲(chǔ)過(guò)程和高級(jí)映射的優(yōu)秀持久層框架。通過(guò)本文給大家介紹Mybatis實(shí)現(xiàn)增刪改查(CRUD)實(shí)例代碼 ,需要的朋友參考下2016-05-05
Java之使用POI教你玩轉(zhuǎn)Excel導(dǎo)入與導(dǎo)出
這篇文章主要介紹了Java之使用POI教你玩轉(zhuǎn)Excel導(dǎo)入與導(dǎo)出,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-10-10
Java應(yīng)用開(kāi)源框架實(shí)現(xiàn)簡(jiǎn)易web搜索引擎
本篇文章主要介紹了Java應(yīng)用開(kāi)源框架實(shí)現(xiàn)簡(jiǎn)易web搜索引擎,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-11-11
Java+swing實(shí)現(xiàn)抖音上的表白程序詳解
這篇文章主要為大家詳細(xì)介紹了如何利用Java?swing實(shí)現(xiàn)抖音上的表白程序,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2022-06-06

