亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

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

踩坑背景

需求

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

//實(shí)體類
@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);
}

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

問題排查

1、實(shí)體類注解

@TableName(autoResultMap = true)

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

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

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

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

此時(shí)問題依舊存在,于是懷疑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>

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

5、 注冊(cè)自定義TypeHandler到 MyBatis

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

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

總結(jié)

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

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

相關(guān)文章

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

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

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

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

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

    Java 線程同步詳解

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

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

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

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

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

    深入理解Java基礎(chǔ)之try-with-resource語法糖

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

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

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

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

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

    Java正則表達(dá)式API字符類

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

    Java Enum的簡單使用

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

最新評(píng)論