mysql JSON数据操作

MySQL 5.7版本后提供JSON数据操作,8.0后有相关API。本文结合代码与SQL介绍JSON日常操作,如创建含JSON字段的表、JSON合并与查询等,还提及可在MyBatis拼接SQL或用Java代码拼接数据插入数据库。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

mysql 在 5.7版本以后提供了JSON数据的操作,在8.0以后提供了对JSON数据操作的API;
以下将结合代码以及SQL对JSON日常操作;

这里的JSON字段可以使用TEXT或者VARCHAR 在实际使用中使用JSON的格式情况会比较少;
比如在一开始创建表的时候,没有预估在这个字段里面会存哪些信息,同样可能一开始都没有计划对该字段的数据使用JSON格式的存储;
当然如果使用JOSN 属性,mysql会对插入该字段的值进行校验,优缺点可以自己评估;

创建一个包含json字段的表;

CREATE TABLE `user_test`
(
    `id`        int(11) NOT NULL AUTO_INCREMENT,
    `user_name` varchar(20) DEFAULT NULL,
    `details`   json        DEFAULT NULL,
    PRIMARY KEY (`id`)
) ENGINE = InnoDB
  DEFAULT CHARSET = utf8mb4
  COLLATE = utf8mb4_0900_ai_ci;

// 插入数据
insert into user_test (user_name, details) VALUE ('张三', '{"key1": "value1","key2": "value2"}');

JSON 合并

update user_test
set details= json_merge('{
  "key1": "value1",
  "key2": "value2"
}', '{
  "key1": "value1",
  "key2": "value2"
}')
where user_name = '张三';

// {"key1": ["value1", "value1"], "key2": ["value2", "value2"]}

查询JSON

-- 精确查询
SELECT JSON_KEYS(details) from user_test where user_name = '张三';
-- 模糊查询
select * from table_test t where detail->'$."key1"' LIKE '%张%';
-- 数组查询
-- 模拟数据
select * from table_test where JSON_CONTAINS( extend_info ->> '$."key1"',JSON_ARRAY ('张三'),'$');

JAVA代码
以上说的在实际操作中可以在Mybaits中拼接JSON格式的sql,同样也可以在java中提供代码,将数据拼接完成以后再插入到数据库;
由于直接赋值的话会覆盖之前的值,而一般装在扩展字段里面的值只有追加或者修改,不会做删除操作,替换掉原有的值则不符合业务需求;

// 以下为伪代码,大概的逻辑和意思是这个;
public void addDetail(String key, String value) {
    Map<String, String> detail= getDetail();
    if (detail== null) {
        detail= new HashMap<>();
    }
    detail.put(key, value);
    setDetail(extendInfo);
}
HashMap<String,Object> getDetail(String detail){
	if(JSONUtil.isJsON(detail)){ // hutool 工具类
		// 取出key转map ,同样有工具类可以快速转
		JSONObject obj = JSONObject.parseJSON(detail);
		
	}else{
		return new HashMap<>();
	}
}
void setDetail(HashMap<String,Object) map){
	this.detail = JSONUtil.toJSONString(map);
}

正常调用 新增或者修改接口即可;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值