# easy-json-support **Repository Path**: easy-framework/easy-json-support ## Basic Information - **Project Name**: easy-json-support - **Description**: 让mybatisplus支持json字段查询和将json字段中的属性值自动赋值到实体属性中的同名字段 - **Primary Language**: Java - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-07-22 - **Last Updated**: 2025-09-06 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ## 介绍 让mybatisplus支持json字段查询和将json字段中的属性值自动赋值到实体属性中的同名字段 ## maven引用[点击查看最新版本](https://central.sonatype.com/search?q=easy-json-support) ``` io.github.xiaoyudeguang easy-json-support ${最新版本} ``` ## yml中增加配置 ```yml mybatis-plus: type-handlers-package: com.xiaoyudeguang.handler configuration: log-impl: org.apache.ibatis.logging.stdout.StdOutImpl ``` ## 使用说明 假设数据库中有一张_sys_user_ 表,表结构如下: ![输入图片说明](sys_user.png) 给_sys_user_表写入一条数据,格式如下: ![输入图片说明](image.png) ### json字段查询 ```java import com.xiaoyudeguang.mapper.SysUserMapper; import com.xiaoyudeguang.model.SysUser; import com.xiaoyudeguang.util.JsonLambda; import com.xiaoyudeguang.wrapper.JsonLambdaQueryWrapper; import org.springframework.beans.factory.annotation.Autowired; import java.util.List; public class Test { @Autowired private SysUserMapper sysUserMapper; public List test(String userNo) { JsonLambdaQueryWrapper lambdaQueryWrapper = JsonLambda.query(); lambdaQueryWrapper.json(SysUser::getJson).eq(SysUser::getUserNo, userNo); //或条件查询 lambdaQueryWrapper.json(SysUser::getJson, expression -> { expression.eq(SysUser::getUserName, "张三").or().eq(SysUser::getUserName, "李四"); }); return sysUserMapper.selectList(lambdaQueryWrapper); } } ``` ### json字段属性值映射到实体属性中的同名字段 #### 写法一(实体类直接继承框架自带的com.xiaoyudeguang.model.Model类) ``` @Data @Builder @AllArgsConstructor @NoArgsConstructor @TableName("sys_user") public class SysUser extends Model { private static final long serialVersionUID = 1L; /** * 会将sys_user表里的json字段中的userNo的值赋值到此字段 */ @JsonField private String userNo; /** * 会将sys_user表里的json字段中的userName的值赋值到此字段 */ @JsonField private String userName; /** * exist为false表示不接受json字段中的同名字段赋值 */ @JsonField(exist = false) private List roleList; } ``` 解释:Model源码如下,可以看到类中有一个json字段,框架会将BaseModel类的json属性中的内容展开并平铺到实体类的属性 ``` package com.xiaoyudeguang.model; import com.baomidou.mybatisplus.annotation.TableField; import com.fasterxml.jackson.annotation.JsonIgnore; import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.databind.node.ObjectNode; import com.xiaoyudeguang.handler.ObjectNodeTypeHandler; import jakarta.persistence.Column; import jakarta.persistence.MappedSuperclass; import lombok.AllArgsConstructor; import lombok.Data; import lombok.EqualsAndHashCode; import lombok.NoArgsConstructor; @Data @MappedSuperclass @NoArgsConstructor @AllArgsConstructor @EqualsAndHashCode(callSuper = false) @JsonInclude(JsonInclude.Include.NON_NULL) public class Model> extends com.baomidou.mybatisplus.extension.activerecord.Model { @JsonIgnore @TableField(typeHandler = ObjectNodeTypeHandler.class) @Column(nullable = false, columnDefinition = "json comment '扩展字段'") private ObjectNode json; } ``` #### 写法二(自定义json字段,需要和表结构里的json字段同名) ```java @Data @Builder @AllArgsConstructor @NoArgsConstructor @TableName("sys_user") public class SysUser implements Serializable { @JsonIgnore @TableField(typeHandler = ObjectNodeTypeHandler.class) private ObjectNode extension; /** * 会将sys_user表里的json字段中的userNo的值赋值到此字段 */ @JsonField private String userNo; /** * 会将sys_user表里的json字段中的userName的值赋值到此字段 */ @JsonField private String userName; /** * exist为false表示不接受json字段中的同名字段赋值 */ @JsonField(exist = false) private List roleList; } ```