Mybatis-json


最近工作中使用了Mysql的JSON字段,对相关知识点做一个简单的记录。

MyBatis-JSON字段

Mysql中的JSON字段

MySQL在2015年中期发布了MySQL 5.7.8,为我们提供了JSON数据类型。从那时起,它一直被用作逃避严格的列定义并存储所有形状和大小的JSON文档的一种方式:审核日志,配置设置,第三方有效负载,用户定义的字段等。

-- auto-generated definition
create table sys_json
(
    id       int auto_increment primary key,
    json     json             not null,
    del_flag char default '1' not null comment '删除标记:0已删除 1未删除'
);


INSERT INTO sys_json (id, json, del_flag) VALUES (1, '{"after": "外呼策略:测试;优先级:7;", "before": "外呼策略:test030801;优先级:5;"}', '1');
INSERT INTO sys_json (id, json, del_flag) VALUES (2, '{"id": 142, "name": "wql", "label": "李四的家人"}', '1');
INSERT INTO sys_json (id, json, del_flag) VALUES (3, '{"id": 3000, "name": "wql", "birthday": "2023-08-08"}', '1');

编制索引

若json字符串非数组时,可以通过$.字段名来表示查询对应的value

SELECT json->>"$.id" FROM sys_json;

SELECT JSON_UNQUOTE(JSON_EXTRACT(json, "$.id")) FROM sys_json;

编制列

ALTER TABLE sys_json ADD COLUMN json_id VARCHAR(255) GENERATED ALWAYS as (json->>"$.id");

查询

SELECT json_id FROM sys_json;

现在我们已经准备好了生成的列,我们可以像添加任何其他列一样向其添加索引。

ALTER TABLE sys_json ADD INDEX json_id (json_id) USING BTREE;

我们在 json_id上定义了一个索引,它是一个基于表达式json->>"$.id" 生成的列。我们已经证明,当我们对 json_id列进行查询时,会使用索引。更有趣的是,优化程序足够聪明,如果我们忘记对命名 email 列进行查询,它依然可以帮助我们!

功能索引

引用

在 MySQL 中对 JSON 编制索引

MySQL 5.7新增对JSON支持

MySql中json类型数据的查询以及在MyBatis-Plus中的使用

MybatisPlus如何处理Mysql的json类型


文章作者: WangQingLei
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 WangQingLei !
  目录