# 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_表写入一条数据,格式如下:

### 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;
}
```