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

使用mybatisplus接收mysql字段為json類型的數(shù)據(jù)方式

 更新時間:2024年04月03日 09:37:23   作者:深藍(lán)格調(diào)_  
這篇文章主要介紹了使用mybatisplus接收mysql字段為json類型的數(shù)據(jù)方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教

一.數(shù)據(jù)庫設(shè)計

CREATE TABLE `inv_learning_examination_questions`  (
  `id` bigint(20) NOT NULL,
  `title` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '題目',
  `options` json NULL COMMENT '選項',
  `standard_answer` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '標(biāo)準(zhǔn)答案',
  `answer_analysis` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '答案解析',
  `open_range` tinyint(4) NULL DEFAULT NULL COMMENT '開放范圍',
  `business_area` tinyint(4) NULL DEFAULT NULL COMMENT '業(yè)務(wù)領(lǐng)域',
  `difficulty_level` tinyint(4) NULL DEFAULT NULL COMMENT '難度等級',
  `topic_type` tinyint(4) NULL DEFAULT NULL COMMENT '選題類型',
  `views` int(11) NULL DEFAULT NULL COMMENT '瀏覽量',
  `collect` int(11) NULL DEFAULT NULL COMMENT '收藏量',
  `status` tinyint(4) NULL DEFAULT NULL COMMENT '發(fā)布狀態(tài)',
  `release_time` datetime(0) NULL DEFAULT NULL COMMENT '發(fā)布時間'
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic;

二.實體類

(切記實體類@TableName一定要加上autoResultMap = true屬性,否則查不出來該屬性的值)

package com.innovation.desk.domain;
 
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.extension.handlers.FastjsonTypeHandler;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.innovation.common.base.BaseLLEntity;
import com.innovation.common.utils.DateUtil;
import com.innovation.desk.handler.OptionHandler;
import lombok.Data;
import lombok.EqualsAndHashCode;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import org.springframework.format.annotation.DateTimeFormat;
 
import java.util.Date;
import java.util.List;
 
/**
 * LearningExaminationQuestions實體類
 *
 * @author admin
 * @since 2023/03/03
 */
@Data
@TableName(value = "inv_learning_examination_questions",autoResultMap = true)
@EqualsAndHashCode(callSuper = true)
@ApiModel(value = "LearningExaminationQuestions對象", description = "LearningExaminationQuestions對象")
public class LearningExaminationQuestions extends BaseLLEntity {
 
    private static final long serialVersionUID = 1L;
 
    @ApiModelProperty(value = "題目")
    private String title;
 
    @TableField(typeHandler = OptionHandler.class)
    @ApiModelProperty(value = "選項")
    private List<Option> options;
 
    @TableField(typeHandler = FastjsonTypeHandler.class)
    @ApiModelProperty(value = "標(biāo)準(zhǔn)答案")
    private List<String> standardAnswer;
 
    @ApiModelProperty(value = "答案解析")
    private String answerAnalysis;
 
    @ApiModelProperty(value = "開放范圍")
    private Integer openRange;
 
    @ApiModelProperty(value = "業(yè)務(wù)領(lǐng)域")
    private Integer businessArea;
 
    @ApiModelProperty(value = "難度等級")
    private Integer difficultyLevel;
 
    @ApiModelProperty(value = "選題類型")
    private Integer topicType;
 
    @ApiModelProperty(value = "瀏覽量")
    private Integer views;
 
    @ApiModelProperty(value = "收藏量")
    private Integer collect;
 
    @ApiModelProperty(value = "發(fā)布狀態(tài) 0.待發(fā)布 1.已發(fā)布")
    private Integer status;
 
    @ApiModelProperty(value = "發(fā)布狀態(tài) 0.待發(fā)布 1.已發(fā)布")
    @DateTimeFormat(pattern = DateUtil.PATTERN_DATETIME)
    @JsonFormat(pattern = DateUtil.PATTERN_DATETIME, timezone = "GMT+8")
    private Date releaseTime;
}

1.如果接收參數(shù)是實體類或List<String>

可以直接使用mybatisplus自帶的解析處理器即可

例如在屬性上添加

@TableField(typeHandler = FastjsonTypeHandler.class)

此處FastjsonTypeHandler有多個類型可供選擇:

比如AbstractJsonTypeHandler,AbstractSqlParserHandler,FastjsonTypeHandler,GsonTypeHandler,JacksonTypeHandler,MybatisEnumTypeHandler

2.如果接收參數(shù)是個List<實體類>

這里需要注意:

以上提供的解析器不能提供完全解析

這里你需要自定義解析器做定制化解析

以下是解析器的源碼

原因:

type屬性被注入進(jìn)來的只是List的字節(jié)碼文件,通過parse方法只能將json轉(zhuǎn)化為List<JsonObject>對象,而JsonObject不能強轉(zhuǎn)為相應(yīng)的實體類,所以在獲取到解析后的對象遍歷的時候會報類型轉(zhuǎn)換錯誤異常,這時可以重寫此handler的parse方法來實現(xiàn)自己的目的,以下是將json轉(zhuǎn)化為List<Option>的處理器

/**
 *  自定義CardContent轉(zhuǎn)換處理類
 * @author Administrator
 */
public class OptionHandler extends FastjsonTypeHandler {
 
    public OptionHandler(Class<?> type) {
        super(type);
    }
 
    @Override
    protected Object parse(String json) {
        return JSON.parseArray(json, Option.class);
    }
 
    @Override
    protected String toJson(Object obj) {
        return super.toJson(obj);
    }
}

添加完成后只需在實體類的對應(yīng)屬性上添加注解

@TableField(typeHandler = OptionHandler.class)即可實現(xiàn)解析

如果使用了xml文件可參考以下方式

<result column="options" property="options" jdbcType="VARCHAR"
                typeHandler="com.innovation.desk.handler.OptionHandler"/>

總結(jié)

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

相關(guān)文章

  • Java讀寫ini文件代碼示例

    Java讀寫ini文件代碼示例

    這篇文章主要介紹了Java讀寫ini文件代碼示例,分享了相關(guān)代碼示例及相關(guān)注釋,小編覺得還是挺不錯的,具有一定借鑒價值,需要的朋友可以參考下
    2018-02-02
  • Java SpringMVC自學(xué)自講

    Java SpringMVC自學(xué)自講

    本篇文章主要介紹了java SpringMVC——如何獲取請求參數(shù)詳解,詳細(xì)的介紹了每種參數(shù)注解的用法及其實例。感興趣的小伙伴們可以參考一下
    2021-09-09
  • Java?String類和StringBuffer類的區(qū)別介紹

    Java?String類和StringBuffer類的區(qū)別介紹

    這篇文章主要介紹了Java?String類和StringBuffer類的區(qū)別,?關(guān)于java的字符串處理我們一般使用String類和StringBuffer類有什么不同呢,下面我們一起來看看詳細(xì)介紹吧
    2022-03-03
  • 簡單聊聊Java中驗證碼功能的實現(xiàn)

    簡單聊聊Java中驗證碼功能的實現(xiàn)

    相信大家都經(jīng)常接觸到驗證碼的,畢竟平時上網(wǎng)也能遇到各種驗證碼,需要我們輸入驗證碼進(jìn)行驗證我們是人類,本篇文章就從這幾個方面出發(fā)說說驗證碼,廢話不多說,下面開始正文
    2023-06-06
  • 淺談Java由于不當(dāng)?shù)膱?zhí)行順序?qū)е碌乃梨i

    淺談Java由于不當(dāng)?shù)膱?zhí)行順序?qū)е碌乃梨i

    為了保證線程的安全,我們引入了加鎖機制,但是如果不加限制的使用加鎖,就有可能會導(dǎo)致順序死鎖(Lock-Ordering Deadlock)。本文將會討論一下順序死鎖的問題。
    2021-06-06
  • IDEA安裝阿里代碼規(guī)范插件的步驟圖文詳解

    IDEA安裝阿里代碼規(guī)范插件的步驟圖文詳解

    這篇文章主要介紹了IDEA安裝阿里代碼規(guī)范插件的步驟,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-12-12
  • springboot使用小工具之Lombok、devtools、Spring Initailizr詳解

    springboot使用小工具之Lombok、devtools、Spring Initailizr詳解

    這篇文章主要介紹了springboot使用小工具之Lombok、devtools、Spring Initailizr詳解,Lombok可以代替手寫get、set、構(gòu)造方法等,需要idea裝插件lombok,本文通過示例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2022-10-10
  • SpringBoot中集成企業(yè)微信機器人實現(xiàn)運維報警的示例

    SpringBoot中集成企業(yè)微信機器人實現(xiàn)運維報警的示例

    本文主要介紹了SpringBoot中集成企業(yè)微信機器人實現(xiàn)運維報警,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-05-05
  • 關(guān)于?Math.random()生成指定范圍內(nèi)的隨機數(shù)的公式推導(dǎo)問題

    關(guān)于?Math.random()生成指定范圍內(nèi)的隨機數(shù)的公式推導(dǎo)問題

    在 java 中,用于生成隨機數(shù)的 Math 方法 random()只能生成 0-1 之間的隨機數(shù),而對于生成指定區(qū)間,例如 a-b 之間的隨機數(shù),卻只能用相關(guān)計算公式,今天通過本文給大家介紹Math.random()生成隨機數(shù)的公式推導(dǎo)問題,感興趣的朋友一起看看吧
    2022-09-09
  • java生成json實現(xiàn)隱藏掉關(guān)鍵屬性

    java生成json實現(xiàn)隱藏掉關(guān)鍵屬性

    這篇文章主要介紹了java生成json實現(xiàn)隱藏掉關(guān)鍵屬性,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-03-03

最新評論