实体类 autoResultMap = true 在plus查询中 自动读取json
typeHandler = JacksonTypeHandler.class 写入时转为json字符串写入
@TableName(value = "xxx",autoResultMap = true)
public class xxx
{
@TableField(typeHandler = JacksonTypeHandler.class)
private List<String> xxx;
...
mybatis 中读取json
typeHandler="com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler"/> 声明字段为json 指定转换器
resultMap="xxxid"> 设置查询函数的输出类型
<resultMap id="xxxid" type="xxxType">
<result column="xxx" jdbcType="OTHER" property="xxx" javaType="java.util.List"
typeHandler="com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler"/>
</resultMap>
<select id="xxxselect" resultMap="xxxid">
...
-- 查询 id json字段wordvalues中的学员姓名 命名为name 使用双引号处理json中的特殊字符 并且使用JSON_UNQUOTE 去除结果的引号
SELECT
id,
JSON_UNQUOTE( JSON_EXTRACT( wordvalues, '$."${学员姓名}"' ) ) AS 'name',
JSON_UNQUOTE( JSON_EXTRACT( wordvalues, '$."${学员费用}"' ) ) AS 'price',
JSON_UNQUOTE( JSON_EXTRACT( res, '$.data.url' ) ) AS url,
maketime
FROM
`ry-cloud`.`app_markword` -- 查询必须有签名的 这里可以优化下
WHERE
`wordmore` LIKE '%g", "zhangKey": "${学%' -- 根据 wordvalues 合同编号 唯一分组
GROUP BY
JSON_EXTRACT( wordvalues, '$."${合同编号}"' )
ORDER BY
id DESC
LIMIT 0,
1000
JSON_UNQUOTE(a) 如果a是json去除a的引号输出
JSON_EXTRACT(a,'$."b"') 对json字段a 取其字段b " 为处理 b中含有特殊字符的
需求
在array中查询 item中某个值的选项
aaa 字段
bbb 当中的值
where JSON_CONTAINS( aaa, '"bbb"' )
在array中查询 obj中某个值的选项
某个字段的值 统一为以下格式 如何查询 userid为 xxx的呢
[
{
"tags":[
],
"remark":"5.14梁盼-田毅-初级中药无忧",
"userid":"aaa",
"add_way":2,
"createtime":1620974058,
"description":"",
"oper_userid":"aaa",
"remark_mobiles":[
"xxx"
]
}
]
用 两个函数
JSON_CONTAINS 这个是查询 数组的
follow_user 为哪个字段的数组
JSON_OBJECT 为数组的值是哪个
...
WHERE
JSON_CONTAINS(
follow_user,
JSON_OBJECT( 'userid', 'aaa' ))
...