–创建json数据表
CREATE TABLE `tb_json` (
`id` BIGINT UNSIGNED NOT NULL COMMENT '主键ID',
`code` VARCHAR(50) NOT NULL COMMENT '编码',
`name` VARCHAR(50) NOT NULL COMMENT '名称',
`json_data` JSON COMMENT 'json数据对象',
`data_status` TINYINT NOT NULL DEFAULT '1' COMMENT '数据状态 0 草稿,1 可用,-1 删除,默认 1',
`creator` VARCHAR(50) COMMENT '创建者ID',
`creator_name` VARCHAR(50) COMMENT '创建者名称',
`create_time` BIGINT COMMENT '创建时间(时间戳)',
`updater` VARCHAR(50) COMMENT '最后更新者ID',
`updater_name` VARCHAR(50) COMMENT '最后更新者名称',
`update_time` BIGINT COMMENT '最后更新时间(时间戳)',
`remark` VARCHAR(500) COMMENT '备注',
PRIMARY KEY (`id`) USING BTREE
) ENGINE=INNODB AUTO_INCREMENT=1 DEFAULT CHARSET='utf8' COLLATE='utf8_general_ci' COMMENT='json数据表';
java对象
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.extension.handlers.FastjsonTypeHandler;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
//加上 autoResultMap 会自动填充Json对象
@TableName(value = "tb_json", autoResultMap = true)
public class Json implements Serializable{
/**
* 主键ID
*/
@TableId(value = "`id`", type = IdType.INPUT)
private Long id;
/**
* 编码
*/
@TableField(value = "`code`")
private String code;
/**
* 名称
*/
@TableField(value = "`name`")
private String name;
/**
* JSON数据对象
*/
//需要指定解析类型
@TableField(value = "`json`",typeHandler = FastjsonTypeHandler.class)
private JsonVo json;
/**
* 数据状态 0 草稿,1 可用,-1 删除,默认 1
*/
@TableField(value = "`data_status`")
private Integer dataStatus;
/**
* 创建者ID
*/
@TableField(value = "`creator`")
private String creator;
/**
* 创建者名称
*/
@TableField(value = "`creator_name`")
private String creatorName;
/**
* 创建时间(时间戳)
*/
@TableField(value = "`create_time`")
private Long createTime;
/**
* 最后更新者ID
*/
@TableField(value = "`updater`")
private String updater;
/**
* 最后更新者名称
*/
@TableField(value = "`updater_name`")
private String updaterName;
/**
* 最后更新时间(时间戳)
*/
@TableField(value = "`update_time`")
private Long updateTime;
/**
* 备注
*/
@TableField(value = "`remark`")
private String remark;
}
JsonVo对象
import com.baomidou.mybatisplus.annotation.TableField;
import lombok.Data;
@Data
public class JsonVo {
/**
* 扩展名称
*/
@TableField(value = "`extName`")
private String extName;
/**
* 扩展手机号
*/
@TableField(value = "`extPhone`")
private String extPhone;
}
查询json对象时
json-> '$.extPhone'
去除双引号查询json对象时
JSON_UNQUOTE(json->'$.extPhone')
查询数组时
JSON_CONTAINS(json -> '$[*].extName' ,'"ad"')
批量列表查询时,需要自行转化数据
方法1
1、整体对象取出
select id,code,name,json_data as jsonDataObject from tb_json;
2、对象转化
import com.alibaba.fastjson.JSONObject;
String jsonDataStr = entity.getJsonDataObject().replace("\\\"","\"");
JsonVo jsonData = JSONObject.parseObject(jsonDataStr,JsonVo.class);