已知表结构为:CREATE TABLE `dmp_data_verification_rule` ( `id` varchar(40) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '主键', `rule_code` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '规则编码', `rule_comment` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci COMMENT '规则说明', `reconfirm_flag` tinyint NOT NULL COMMENT '是否需要人为二次判断', `rule_type_id` varchar(40) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '规则分类id', `rule_set_ids` json DEFAULT NULL COMMENT '规则集ids,数组形式:["1"]', `rule_order` int DEFAULT NULL COMMENT '规则排序', `extra_note` json DEFAULT NULL COMMENT '备注', `creator` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '创建人', `creation_time` varchar(14) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '创建时间', `modifier` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '最后修改人', `modified_time` varchar(14) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '最后修改时间', `valid` tinyint NOT NULL COMMENT '合法标识', `ts` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '乐观锁', PRIMARY KEY (`id`) USING BTREE, KEY `idx_type_id` (`rule_type_id`) USING BTREE COMMENT '规则类型索引', KEY `idx_rule_code` (`rule_code`) USING BTREE COMMENT '规则编码', KEY `idx_rule_order` (`rule_order`) USING BTREE COMMENT '规则排序' ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='数据校验规则表';,extra_note 存储的数据有{"scopeCode": "project", "classCodesA": ["ACCCAC"], "classCodesB": ["ACCCCP","ACCCAC"]},怎么根据ruleTypeId,及classCodesB(数组)进行数据查询,classCodesB传的是个数组,需要判断数组中的元素是否完全相同相等,通过mysql及mapper.xml实现
时间: 2024-03-02 11:49:56 浏览: 87
可以使用MySQL的JSON_CONTAINS函数和JSON_EXTRACT函数来实现。具体的SQL语句如下:
```
SELECT * FROM dmp_data_verification_rule
WHERE rule_type_id = 'your_rule_type_id'
AND JSON_CONTAINS(extra_note->'$.classCodesB', '["ACCCCP", "ACCCAC"]') = 1;
```
这条SQL语句中,我们查询了dmp_data_verification_rule表中rule_type_id为'your_rule_type_id',且extra_note字段中的classCodesB数组完全等于["ACCCCP", "ACCCAC"]的数据。其中,JSON_CONTAINS函数用于判断extra_note中的classCodesB数组是否包含指定的数组,如果包含则返回1,否则返回0。而JSON_EXTRACT函数用于提取extra_note中的classCodesB数组。
在mapper.xml中使用该SQL语句的话,可以把SQL语句写在select元素的text属性中。例如:
```
<select id="selectByRuleTypeAndClassCodesB" resultType="YourResultType">
SELECT * FROM dmp_data_verification_rule
WHERE rule_type_id = #{ruleTypeId}
AND JSON_CONTAINS(extra_note->'$.classCodesB', #{classCodesB}) = 1;
</select>
```
其中,#{ruleTypeId}和#{classCodesB}是使用MyBatis的参数占位符。这样,在调用该方法时,只需要传入ruleTypeId和classCodesB两个参数即可。
阅读全文