使用 JOOQ 查询 mysql 中的 json 字段
Posted
技术标签:
【中文标题】使用 JOOQ 查询 mysql 中的 json 字段【英文标题】:Querying a json field in mysql using JOOQ 【发布时间】:2020-12-02 01:14:56 【问题描述】:我有一个事务表,它有一个名为“request”的 json 类型字段。
| Field | Type | Null | Key | Default |
| id | bigint | NO | PRI | NULL |
| request | json | NO | | NULL |
| response | json | YES | | NULL |
request 有两个属性 currencyCode 和 amount。
"amount":100000,"currencyCode":"php"
我可以使用以下 mysql 查询来获取这些值
select json_extract(request, "$.amount") as amount, json_extract(request, "$.currencyCode") as currency from transaction;
| amount | currency |
+--------+----------+
| 100000 | PHP |
| 100000 | PHP |
| 100000 | PHP |
我想使用类似这样的 jooq 查询来获取这些值。
DSL.select(<Tables.TRANSACTION.REQUEST.amount>, <Tables.TRANSACTION.REQUEST.currencyCode>)
.from(Tables.TRANSACTION)
.fetch()
如果有人可以帮助我,我真的很感激。
【问题讨论】:
【参考方案1】:使用 jOOQ 3.14 的 JSON_VALUE
支持
从 jOOQ 3.14 开始,您将能够使用新的内置标准 JSON 运算符支持,例如JSON_VALUE()
。根据文档:
这个例子使用了 jOOQ:
jsonValue(val(JSON.json("[1,2]")), "$[*]")
翻译成以下方言特定的表达方式:
... -- MYSQL json_extract('[1,2]', '$[*]')
在 jOOQ 3.13 及更早版本中使用纯 SQL 模板
当 jOOQ 不支持开箱即用的供应商特定功能时,您可以求助于使用 plain SQL templating。随便写:
public static Field<String> jsonExtract(Field<?> field, String jsonPath)
return DSL.field("json_extract(0, 1)", String.class, field, DSL.inline(jsonPath));
【讨论】:
以上是关于使用 JOOQ 查询 mysql 中的 json 字段的主要内容,如果未能解决你的问题,请参考以下文章
如何将 MySQL JOOQ 重命名表查询范围限定为同一个数据库?
如何在 jOOQ for MySQL 8 中实现 JSON_SET()
如何在 jOOQ 中转换“to_json()”PostgreSQL 函数?