需求:写出mapper xml文件,我想要查找sys_data表中data字段,其中data字段是一个JSON,图二中的map参数,需要让JSON中的key与map中的key相等并且value也相等的数据
<select id="shit" resultType="com.example.SysData">
SELECT *
FROM sys_data
WHERE docuId = #{docuId}
<if test="map != null and map.size() > 0">
<foreach item="value" index="key" collection="map">
AND JSON_EXTRACT(data, CONCAT('$.', #{key})) = #{value}
</foreach>
</if>
</select>
index
属性的作用:- 在遍历集合时,
index
属性表示当前遍历到的元素的索引或键。 - 对于List或数组,它代表元素的索引(从0开始)。
- 对于Map,它代表当前元素的键(key)。
- 在遍历集合时,
item="value"
表示我们将Map的值赋值给变量"value"。- JSON_EXTRACT 是一个MySQL函数,用于从JSON格式的数据中提取特定的值。这个函数在处理JSON数据时非常有用,特别是当你需要查询或操作存储在数据库中的JSON字段时。让我详细解释一下:
- 基本用法: JSON_EXTRACT(json_doc, path)
- json_doc:JSON文档或JSON格式的字符串
- path:用于指定要提取的值的路径
- 路径语法:
- '$'表示整个JSON文档
- '$.key’用于访问顶层的key
- '$[0]'用于访问数组的第一个元素
- '$.key1.key2’用于访问嵌套的JSON对象
- 基本用法: JSON_EXTRACT(json_doc, path)