MyBatis-plus處理存儲json數(shù)據(jù)過程
對象和集合分兩種情況處理,目前我用的MP的版本是3.4.2
1、如果是對象
直接用MP內(nèi)置的Handler,JacksonTypeHandler或FastjsonTypeHandler
@TableField(typeHandler = FastjsonTypeHandler.class) //@TableField(typeHandler = JacksonTypeHandler.class) private CompaniesProject companiesProject;
然后 增加上 autoResultMap = true 屬性,數(shù)據(jù)庫字段companies_project mysql可以用json類型,沒有就用字符類型,就可以了
@TableName(value = "table_name",autoResultMap = true)
2、如果需要轉(zhuǎn)換的是List集合
那么目前MP自帶的Handler就不行,它只能處理對象,不能處理集合,需要進行改造
下面這種會轉(zhuǎn)換失敗,直接報錯的
@TableField(typeHandler = FastjsonTypeHandler.class) //@TableField(typeHandler = JacksonTypeHandler.class) private List<CompaniesProject> companiesProjectList;
需要把這段JSON.parseObject 改為解析集合的方法 JSON.parseArray

新建一個自定義處理器,然后繼承 FastjsonTypeHandler ,重載parse方法
public class JSONTypeHandler extends FastjsonTypeHandler {
private final Class<? extends Object> type;
public JSONTypeHandler(Class<?> type) {
super(type);
this.type = type;
}
@Override
protected List parse(String json) {
return JSON.parseArray(json, type);
// return JSON.parseObject(json, type);
}
@Override
protected String toJson(Object obj) {
return super.toJson(obj);
}
}這樣還不行,因為MP不知為何解析不了 CompaniesProject 類型,需要明確告訴MP的class類型
修改 @TableName,增加resultMap
@TableName(value = "table_name",resultMap = "com.xx.xx.xxDao.selectResultMap")
在對應(yīng)的dao xml中
<mapper namespace="com.xx.xx.xxDao">
<resultMap id="selectResultMap" type="com.xx.xx.xx.ProjectScholarshipDeclarationCompaniesProjectEntity">
<result property="companiesProjectList" column="companies_project_list" typeHandler="com.xx.common.handler.JSONTypeHandler" javaType="com.xx.xx.ProjectScholarshipDeclarationCompaniesProjectEntity$CompaniesProject"/>
</resultMap>
</mapper>總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
idea將Springboot項目打war包部署到tomcat服務(wù)器上實現(xiàn)步驟
本文詳細介紹了如何使用IntelliJ IDEA將Spring Boot項目打包成WAR文件并部署到Tomcat服務(wù)器上,步驟包括創(chuàng)建項目、修改pom.xml文件、進行打包、將WAR文件復制到Tomcat的webapps目錄,并手動啟動Tomcat服務(wù)器進行訪問2025-11-11
Spring 靜態(tài)變量/構(gòu)造函數(shù)注入失敗的解決方案
我們經(jīng)常會遇到一下問題:Spring對靜態(tài)變量的注入為空、在構(gòu)造函數(shù)中使用Spring容器中的Bean對象,得到的結(jié)果為空。不要擔心,本文將為大家介紹如何解決這些問題,跟隨小編來看看吧2021-11-11

