欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

解決Mybatis-plus自定義TypeHandler查詢映射結(jié)果一直為null問題

 更新時間:2024年07月03日 08:58:21   作者:霽月清風與誰同  
這篇文章主要介紹了解決Mybatis-plus自定義TypeHandler查詢映射結(jié)果一直為null問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教

踩坑背景

需求

將實體類中的JSONObject對象與MySQL數(shù)據(jù)庫中VARCHAR類型進行映射

//實體類
@TableName(autoResultMap = true)
@Data
public class ImportItem implements Serializable {
	...
	
    @ExcelIgnore
    @TableField(typeHandler = Fastjson2TypeHandler.class , value = "dynamic_information")
    private JSONObject dynamicInformation;

	...
}
//自定義類Fastjson2TypeHandler
@MappedTypes({JSONObject.class})
@MappedJdbcTypes({JdbcType.VARCHAR})
public class Fastjson2TypeHandler extends AbstractJsonTypeHandler<JSONObject> {

    private static final Logger log = LoggerFactory.getLogger(Fastjson2TypeHandler.class);

    private final Class<JSONObject> type = JSONObject.class;

    public Fastjson2TypeHandler() {
        log.trace("Fastjson2TypeHandler({})", type);
    }

    @Override
    protected JSONObject parse(String json) {
        return JSON.parseObject(json, this.type);
    }

    @Override
    protected String toJson(JSONObject obj) {
        return obj != null ? obj.toJSONString() : null;
    }
}
//自定義查詢語句
public interface ImportItemMapper extends MyMapper<ImportItem> {
    @Select("<script>"
            + "SELECT * from import_item \n"
            + "WHERE company_id=#{companyId} \n"
            + "<if test='batchNumber!= null and batchNumber!=\"\" '>AND batch_number=#{batchNumber}</if> \n"
            + "<if test='mark!= null'>AND mark=#{mark}</if> \n"
            + "${params.dataScope}"
            + "</script>")
    List<ImportItem> getByBatchNumber(ItemQuery itemQuery);
}

此時在操作的時候增刪改都沒為問題,但是調(diào)用自定義的查詢接口的時候dynamicInformation始終查詢結(jié)果為空,通過開啟Mybatis-plus日志打印發(fā)現(xiàn)sql查詢結(jié)果是正常的,因此判斷是自定義的Fastjson2TypeHandler沒有生效。

問題排查

1、實體類注解

@TableName(autoResultMap = true)

2、需要映射處理的字段需要添加注解

@TableField(typeHandler = Fastjson2TypeHandler.class , value = "dynamic_information")
private JSONObject dynamicInformation;

3、各種路徑問題,字段拼寫排查確保正確

4、可以嘗試xml中resultMap使用 typeHandler 屬性

此時問題依舊存在,于是懷疑ImportItemMapper接口問題,由于之前一直沒有使用xml文件,于是決定嘗試使用xml

public interface ImportItemMapper extends MyMapper<ImportItem> {
    List<ImportItem> getByBatchNumber(ItemQuery itemQuery);
}
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.ruoyi.plm.mapper.ImportItemMapper">
    <resultMap id="BaseResultMap" type="com.ruoyi.plm.model.entity.ImportItem">
        <id column="dynamic_information" jdbcType="VARCHAR" property="dynamicInformation" typeHandler="com.ruoyi.plm.util.Fastjson2TypeHandler"/>
    </resultMap>
    <select id="getByBatchNumber" resultMap="BaseResultMap" parameterType="com.ruoyi.system.api.model.plm.ItemQuery">
        SELECT *
        FROM import_item
        WHERE  company_id = #{companyId}
        <if test="batchNumber != null and !batchNumber.isEmpty()">
            AND batch_number = #{batchNumber}
        </if>
        <if test="mark != null">
            AND mark = #{mark}
        </if>
        ${params.dataScope}
    </select>
</mapper>

此時再次嘗試后發(fā)現(xiàn)問題已經(jīng)解決,既然這種方式可以解決問題,那么很有可能是因為自定義 TypeHandler 沒能正確注冊到 MyBatis,因此可以嘗試放棄使用xml選則最后一種方式

5、 注冊自定義TypeHandler到 MyBatis

@Configuration
public class MyBatisConfig {
    @Bean
    public ConfigurationCustomizer mybatisConfigurationCustomizer() {
        return configuration -> {
            // 注冊自定義 TypeHandler
            configuration.getTypeHandlerRegistry().register(JSONObject.class, JdbcType.VARCHAR, new Fastjson2TypeHandler());
        };
    }
}

經(jīng)測試注冊后結(jié)合注解自定義sql語句查詢一切正常,問題完美解決。

總結(jié)

出現(xiàn)增刪改數(shù)據(jù)正常,但查詢結(jié)果為null,很有可能是自定義的TypeHandler未生效,可以參考上述4或5的方法來解決問題。

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關文章

  • Java多線程連續(xù)打印abc實現(xiàn)方法詳解

    Java多線程連續(xù)打印abc實現(xiàn)方法詳解

    這篇文章主要介紹了Java多線程連續(xù)打印abc實現(xiàn)方法詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-03-03
  • 實例講解Java并發(fā)編程之ThreadLocal類

    實例講解Java并發(fā)編程之ThreadLocal類

    這篇文章主要介紹了實例講解Java并發(fā)編程之ThreadLocal類,本文給出了模擬ThreadLocal、實用ThreadLocal等代碼實例,需要的朋友可以參考下
    2015-04-04
  • Java 線程同步詳解

    Java 線程同步詳解

    這篇文章主要給大家詳細介紹的是Java 線程同步的相關問題及代碼示例,有需要的小伙伴可以參考下
    2016-03-03
  • java解析dbf之通過javadbf包生成和讀取dbf文件

    java解析dbf之通過javadbf包生成和讀取dbf文件

    這篇文章主要介紹了java通過javadbf讀取和生成DBF文件的方法,大家參考使用吧
    2014-01-01
  • java駝峰轉(zhuǎn)換的方法

    java駝峰轉(zhuǎn)換的方法

    這篇文章主要為大家詳細介紹了java駝峰轉(zhuǎn)換的方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-07-07
  • 深入理解Java基礎之try-with-resource語法糖

    深入理解Java基礎之try-with-resource語法糖

    這篇文章主要介紹了深入理解Java基礎之try-with-resource語法糖,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-02-02
  • 深度剖析Java成員變量、局部變量和靜態(tài)變量的創(chuàng)建和回收時機

    深度剖析Java成員變量、局部變量和靜態(tài)變量的創(chuàng)建和回收時機

    這篇文章主要介紹了深度剖析Java成員變量、局部變量和靜態(tài)變量的創(chuàng)建和回收時機,成員變量是定義在類中的變量,每個類的實例都會擁有自己的成員變量。它們的生命周期與對象的創(chuàng)建和銷毀相對應,下面我將詳細介紹它們的特點和生命周期,需要的朋友可以參考下
    2023-07-07
  • java中的內(nèi)存溢出方式

    java中的內(nèi)存溢出方式

    文章介紹了如何使用jmap和IBMHeapAnalyzer等工具分析OutOfMemoryError: Compressedclassspace錯誤,發(fā)現(xiàn)問題出在/org/pf4j/PluginClassLoader加載了大量類
    2024-12-12
  • Java正則表達式API字符類

    Java正則表達式API字符類

    這篇文章主要介紹了Java正則表達式API字符類,Java正則表達式API也接受預定義的字符類,下面文章內(nèi)容展開了更多的相關內(nèi)容介紹,需要的朋友可以參考一下
    2022-06-06
  • Java Enum的簡單使用

    Java Enum的簡單使用

    這篇文章主要為大家詳細介紹了Java Enum的簡單使用,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-09-09

最新評論