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

解決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è)試注冊(cè)后結(jié)合注解自定義sql語句查詢一切正常,問題完美解決。

總結(jié)

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

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

相關(guān)文章

  • Java中調(diào)用Python的實(shí)現(xiàn)示例

    Java中調(diào)用Python的實(shí)現(xiàn)示例

    本文主要介紹了Java中調(diào)用Python的實(shí)現(xiàn)示例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-05-05
  • SpringIoC與SpringDI詳解

    SpringIoC與SpringDI詳解

    本文介紹了Spring框架中的IoC(控制反轉(zhuǎn))和DI(依賴注入)概念,以及如何在Spring中使用這些概念來管理對(duì)象和依賴關(guān)系,感興趣的朋友一起看看吧
    2025-03-03
  • 基于Tomcat7、Java、WebSocket的服務(wù)器推送聊天室實(shí)例

    基于Tomcat7、Java、WebSocket的服務(wù)器推送聊天室實(shí)例

    HTML5 WebSocket實(shí)現(xiàn)了服務(wù)器與瀏覽器的雙向通訊,本篇文章主要介紹了基于Tomcat7、Java、WebSocket的服務(wù)器推送聊天室實(shí)例,具有一定的參考價(jià)值,有興趣的可以了解一下。
    2016-12-12
  • springboot整合gateway實(shí)現(xiàn)網(wǎng)關(guān)功能的示例代碼

    springboot整合gateway實(shí)現(xiàn)網(wǎng)關(guān)功能的示例代碼

    本文主要介紹了springboot整合gateway實(shí)現(xiàn)網(wǎng)關(guān)功能的示例代碼,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-02-02
  • SpringCloud配置刷新原理解析

    SpringCloud配置刷新原理解析

    這篇文章主要介紹了SpringCloud之配置刷新的原理,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2018-05-05
  • 詳解java 客戶端鏈接不上redis解決方案

    詳解java 客戶端鏈接不上redis解決方案

    這篇文章主要介紹了詳解java 客戶端鏈接不上redis解決方案,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下。
    2017-01-01
  • 使用IDEA創(chuàng)建Servlet程序的詳細(xì)步驟

    使用IDEA創(chuàng)建Servlet程序的詳細(xì)步驟

    在學(xué)習(xí)servlet過程中,參考的教程是用eclipse完成的,而我在練習(xí)的過程中是使用IDEA的,在創(chuàng)建servlet程序時(shí)遇到了挺多困難,在此記錄一下如何用IDEA完整創(chuàng)建一個(gè)servlet程序,感興趣的朋友一起看看吧
    2024-08-08
  • SpringBoot 項(xiàng)目創(chuàng)建的五種方式示例詳解

    SpringBoot 項(xiàng)目創(chuàng)建的五種方式示例詳解

    本文介紹了五種創(chuàng)建SpringBoot項(xiàng)目的實(shí)用方法,包括通過IDEA直接對(duì)接Spring官方服務(wù)器、Spring官方網(wǎng)站下載導(dǎo)入IDEA、對(duì)接阿里云鏡像服務(wù)器以及手動(dòng)配置Maven項(xiàng)目,每種方法都有其特點(diǎn)和適用場景,開發(fā)者可以根據(jù)需求選擇最適合的方式,感興趣的朋友跟隨小編一起看看吧
    2026-02-02
  • SpringBoot的ResponseEntity類返回給前端具體講解

    SpringBoot的ResponseEntity類返回給前端具體講解

    這篇文章主要給大家介紹了關(guān)于SpringBoot的ResponseEntity類返回給前端的相關(guān)資料,ResponseEntity是Spring框架中用于封裝HTTP響應(yīng)的類,可以自定義狀態(tài)碼、響應(yīng)頭和響應(yīng)體,常用于控制器方法中返回特定數(shù)據(jù)的HTTP響應(yīng),需要的朋友可以參考下
    2024-11-11
  • Java實(shí)戰(zhàn)小技巧之?dāng)?shù)組與list互轉(zhuǎn)

    Java實(shí)戰(zhàn)小技巧之?dāng)?shù)組與list互轉(zhuǎn)

    在Java中,經(jīng)常遇到需要List與數(shù)組互相轉(zhuǎn)換的場景,下面這篇文章主要給大家介紹了關(guān)于Java實(shí)戰(zhàn)小技巧之?dāng)?shù)組與list互轉(zhuǎn)的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2021-08-08

最新評(píng)論

德兴市| 水城县| 林州市| 尉犁县| 邹平县| 木里| 乾安县| 灵武市| 彩票| 达孜县| 海晏县| 密云县| 南投市| 东乡族自治县| 临西县| 瓮安县| 安丘市| 麻江县| 罗山县| 平罗县| 喀什市| 越西县| 昌都县| 泰和县| 安新县| 西乌珠穆沁旗| 祁阳县| 阜平县| 方正县| 嵊州市| 千阳县| 仁怀市| 夏河县| 织金县| 衢州市| 临海市| 辽中县| 读书| 浑源县| 钦州市| 连江县|