最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

MyBatisPlus自定義JsonTypeHandler實現(xiàn)自動轉(zhuǎn)化JSON問題

 更新時間:2023年12月07日 09:25:38   作者:金鱗踏雨  
這篇文章主要介紹了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)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

最新評論

昭觉县| 阿勒泰市| 颍上县| 扎鲁特旗| 特克斯县| 盐源县| 临海市| 溧阳市| 南丹县| 抚顺市| 静宁县| 象山县| 夏邑县| 巨鹿县| 荆州市| 二连浩特市| 台中市| 中宁县| 台湾省| 连山| 舒城县| 徐闻县| 吉木萨尔县| 翁牛特旗| 昆山市| 杂多县| 康平县| 凤翔县| 北川| 剑阁县| 长丰县| 灵武市| 湖北省| 盐山县| 增城市| 璧山县| 永丰县| 沿河| 百色市| 宜宾县| 洪湖市|