MyBatisPlus自定義JsonTypeHandler實現(xiàn)自動轉(zhuǎn)化JSON問題
背景
在項目中使用了Mybatis-Plus框架,調(diào)用了Mapper層的 insert()
如下所示,DingRobotMsg對象 的屬性包含了其它的對象(Text、Content)
數(shù)據(jù)庫表字段里有與之對應(yīng)的字段,類型為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: 類型錯誤!
}
}
}@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ù)處理)的情況下實現(xiàn)數(shù)據(jù)庫的插入操作呢?
JsonTypeHandler
有的對象字段需要存儲為Json,可以直接轉(zhuǎn)成Json賦值后再保存。
也可以通過Mybatis的TypeHandler自動處理。
通用 JsonTypeHandler 工具類
/**
* 對象字段轉(zhuǎn)存為Json類型
* @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 {
// 將對象轉(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)換為指定類型的對象
String jsonString = rs.getString(columnName);
return JSON.parseObject(jsonString, type);
}
@Override
public T getNullableResult(ResultSet rs, int columnIndex) throws SQLException {
// 從ResultSet中獲取JSON字符串并轉(zhuǎn)換為指定類型的對象
String jsonString = rs.getString(columnIndex);
return JSON.parseObject(jsonString, type);
}
@Override
public T getNullableResult(CallableStatement cs, int columnIndex) throws SQLException {
// 從CallableStatement中獲取JSON字符串并轉(zhuǎn)換為指定類型的對象
String jsonString = cs.getString(columnIndex);
return JSON.parseObject(jsonString, type);
}
}JsonTypeHandler 的使用
在entry對象的字段上面加上下面的注解即可!
@TableField(typeHandler = JsonTypeHandler.class) private Content content; @TableField(typeHandler = JsonTypeHandler.class) private Text text;
總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
- MyBatis自定義TypeHandler實現(xiàn)字段加密解密
- MyBatis類型處理器TypeHandler的作用及說明
- MyBatis中TypeHandler的使用教程詳解
- MyBatis-Plus?中?typeHandler?的使用實例詳解
- SpringBoot中MyBatis使用自定義TypeHandler的實現(xiàn)
- 解決Mybatis-plus自定義TypeHandler查詢映射結(jié)果一直為null問題
- Mybatis中TypeHandler使用小結(jié)
- Mybatis的TypeHandler實現(xiàn)數(shù)據(jù)加解密詳解
- Mybatis中自定義TypeHandler處理枚舉的示例代碼
- MyBatis自定義TypeHandler如何解決字段映射問題
- MyBatis中TypeHandler基本用法與示例
相關(guān)文章
解決MyBatis Mapper的XML文件SQL語句無法自動提示問題(親測有效)
這篇文章主要給大家介紹了如何解決MyBatis Mapper的XML文件SQL語句無法自動提示的問題,文中有詳細的原因分析,以及通過圖文介紹的解決方案,需要的朋友可以參考下2023-10-10
java實現(xiàn)微信公眾平臺發(fā)送模板消息的示例代碼
這篇文章主要介紹了java實現(xiàn)微信公眾平臺發(fā)送模板消息的示例代碼,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-09-09
Nacos啟動出現(xiàn)failed to req API:/nacos/v1/ns/insta
這篇文章主要介紹了Nacos啟動出現(xiàn)failed to req API:/nacos/v1/ns/instance after all servers問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-08-08
從內(nèi)存方面解釋Java中String與StringBuilder的性能差異
我們通常會發(fā)現(xiàn)使用StringBuffer或StringBuilder創(chuàng)建出來的字符串在拼接時回避String要來得快,尤其是StringBuilder,本文就從內(nèi)存方面解釋Java中String與StringBuilder的性能差異,需要的朋友可以參考下2016-05-05
Java數(shù)據(jù)結(jié)構(gòu)及算法實例:樸素字符匹配 Brute Force
這篇文章主要介紹了Java數(shù)據(jù)結(jié)構(gòu)及算法實例:樸素字符匹配 Brute Force,本文直接給出實例代碼,代碼中包含詳細注釋,需要的朋友可以參考下2015-06-06
從基礎(chǔ)到實戰(zhàn)詳解SpringBoot3實現(xiàn)分頁操作的完整指南
在當今的互聯(lián)網(wǎng)軟件開發(fā)領(lǐng)域,處理海量數(shù)據(jù)是一個繞不開的話題,這篇文章jiang深入探討在 Spring Boot3 中如何巧妙實現(xiàn)分頁操作,下面我們就來詳細介紹一下吧2025-12-12
java多線程返回值使用示例(callable與futuretask)
這篇文章主要介紹了多線程返回值使用示例(callable與futuretask),需要的朋友可以參考下2014-04-04

