当前位置: 首页 > news >正文

MyBatis-Plus 之 typeHandler 的使用

一、typeHandler 的使用
   1、存储json格式字段

        如果字段需要存储为json格式,可以使用JacksonTypeHandler处理器。使用方式非常简单,如下所示:
        

在domain实体类里面要加上,两个注解

  @TableName(autoResultMap = true) 表示自动映射resultMap


         @TableField(typeHandler = JacksonTypeHandler.class)表示将UserInfo对象转为json对象入库

    /*** 物料分类*/@TableField(typeHandler = SupplierMaterialCategoryTypeHandler.class)private List<MaterialCategory> materialCategory;

   2、自定义 typeHandler 实现类
        例如当我们 某个字段存储的类型为List或者Map时,我们可以自定义一个TypeHandler,以 list 为例,我们想存储一个字段类型为 list ,在数据库中的存储的格式是 多条数据以逗号分割,当查询时会自动根据逗号分割成列表格式。

        需要实现BaseTypeHandler抽象类:

package com.mdgyl.hussar.basic.handler;import com.mdgyl.common.util.vo.ChangeInfoVO;
import com.mdgyl.data.mybatis.plus.typehandler.ListTypeHandler;
import com.mdgyl.hussar.basic.supplier.masterdata.domain.SupplierDO;/*** @author shuquanlin*/
public class SupplierMaterialCategoryTypeHandler extends ListTypeHandler<SupplierDO.MaterialCategory> {@Overrideprotected SupplierDO.MaterialCategory specificType() {return new SupplierDO.MaterialCategory();}
}

在mybaits中的xml文件中

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.mdgyl.hussar.basic.supplier.changeorder.dao.ChangeOrderMapper"><resultMap id="BaseResultMap" type="com.mdgyl.hussar.basic.supplier.changeorder.domain.SupplierChangeOrderDo"><id column="id" property="id" jdbcType="BIGINT" /><result column="tenant_id" property="tenantId" jdbcType="BIGINT" /><result column="supplier_id" property="supplierId" jdbcType="BIGINT" /><result column="code" property="code" jdbcType="BIGINT" /><result column="els_account" property="elsAccount" jdbcType="VARCHAR" /><result column="name" property="name" jdbcType="VARCHAR" /><result column="external_code" property="externalCode" jdbcType="VARCHAR" /><result column="material_category" property="materialCategory" typeHandler="com.mdgyl.hussar.basic.handler.ChangeOrderMaterialCategoryTypeHandler" /><result column="status" property="status" jdbcType="VARCHAR" /><result column="audit_status" property="auditStatus" jdbcType="VARCHAR" /><result column="source_scene" property="sourceScene" jdbcType="VARCHAR" /><result column="score" property="score" jdbcType="DECIMAL" /><result column="contact_information" property="contactInformation" jdbcType="VARCHAR" /><result column="inquiry_type" property="inquiryType" jdbcType="VARCHAR" /><result column="route" property="route" jdbcType="VARCHAR" /><result column="transaction_currency" property="transactionCurrency" jdbcType="VARCHAR" /><result column="payment_currency" property="paymentCurrency" jdbcType="VARCHAR" /><result column="payment_condition" property="paymentCondition" jdbcType="VARCHAR" /><result column="open_account_condition" property="openAccountCondition" jdbcType="VARCHAR" /><result column="operating_start_time" property="operatingStartTime" jdbcType="DATE" /><result column="taxpayer_identity_number" property="taxpayerIdentityNumber" jdbcType="VARCHAR" /><result column="unified_social_credit_code" property="unifiedSocialCreditCode" jdbcType="VARCHAR" /><result column="belong_company_id" property="belongCompanyId" jdbcType="BIGINT" /><result column="purchaser_head_id" property="purchaserHeadId" jdbcType="BIGINT" /><result column="create_user_id" property="createUserId" jdbcType="BIGINT" /><result column="create_user_name" property="createUserName" jdbcType="VARCHAR" /><result column="update_user_id" property="updateUserId" jdbcType="BIGINT" /><result column="update_user_name" property="updateUserName" jdbcType="VARCHAR" /><result column="update_time" property="updateTime" jdbcType="TIMESTAMP" /><result column="create_time" property="createTime" jdbcType="TIMESTAMP" /><result column="delete_flag" property="deleteFlag" jdbcType="VARCHAR" /><result column="legal_representative" property="legalRepresentative" jdbcType="VARCHAR" /><result column="supplier_data_id" property="supplierDataId" jdbcType="BIGINT" /></resultMap><select id="groupByStatus" parameterType="com.mdgyl.hussar.basic.param.changeOrder.SupplierChangeOrderPageQueryParam" resultType="com.mdgyl.hussar.basic.model.common.StatusGroupModel">SELECT status AS status,count(id) AS countFROM `t_supplier_change_order`WHERE tenant_id = #{tenantId} AND delete_flag = '0'<if test="code != null and code != ''">AND code = #{code}</if><if test="elsAccount != null and elsAccount != ''">AND els_account = #{elsAccount}</if><if test="name != null and name != ''">AND name = #{name}</if><if test="supplierId != null and supplierId != ''">AND supplier_id = #{supplierId}</if>GROUP BY status</select>
</mapper>

如果要查找json中的字段,可以在domain类里面加上虚拟字段

@TableField(exist = false)public static final String materialCategoryUserIdQuery = "JSON_CONTAINS(material_category, JSON_OBJECT('materialCategoryUserId', {0}))";

在xml文件中加上

       <if test="name != null and name != ''">AND JSON_CONTAINS(material_category, JSON_OBJECT('materialCategoryName', #{name}))</if>

http://www.lryc.cn/news/455446.html

相关文章:

  • HDLBits中文版,标准参考答案 |2.5 More Verilog Features | 更多Verilog 要点
  • 提升开机速度:有效管理Windows电脑自启动项,打开、关闭自启动项教程分享
  • 数据库简单介绍
  • 运用MinIO技术服务器实现文件上传——利用程序上传图片(二 )
  • C语言 | Leetcode C语言题解之第461题汉明距离
  • Qt 3D、QtQuick、QtQuick 3D 和 QML 的关系
  • 软件设计师(软考学习)
  • 第一讲:Go语言开发入门:环境搭建与基础语法
  • Linux CentOS stream9配置本地yum源
  • std::string
  • 【Docker】03-自制镜像
  • Java GC 分类,8和9使用的哪种?
  • 【Docker从入门到进阶】01.介绍 02.基础使用
  • GraphRAG-Local-UI - 基于 GraphRAG 支持本地的聊天UI
  • Java 根据字符生成背景透明的图片
  • 树莓派3b安装ubuntu18.04服务器系统server配置网线连接
  • 【AIGC】2022-NIPS-视频扩散模型
  • 从零开始构建:Python自定义脚本自动化你的日常任务
  • 【python实操】python小程序之对象的属性操作
  • HCIP——网络类型及数据链路层协议
  • 数据结构——栈与队列的实现(全码)
  • MacOS编译和安装Poco库的方法
  • 医院管理新境界:Spring Boot技术突破
  • Docker 环境下 MinIO 监控实战:通过 Prometheus 实现集群与桶级别性能监控
  • 渗透测试入门学习——使用python脚本自动跟踪csrf_token实现对网站登录界面的暴力破解
  • stc8最小系统使用usb下载程序,关于断电的避坑
  • API 数据接口:使用操作流程与安全指南
  • elasticsearch 8.2 版本如何设置config/elasticsearch.yml
  • 华为 HCIP-Datacom H12-821 题库 (33)
  • 【网络篇】计算机网络——运输层详述(笔记)