【问题标题】:Querying a json field in mysql using JOOQ使用 JOOQ 查询 mysql 中的 json 字段
【发布时间】:2023-03-23 15:32:01
【问题描述】:

我有一个事务表,它有一个名为“request”的 json 类型字段。

| Field               | Type         | Null | Key | Default |
| id                  | bigint       | NO   | PRI | NULL    |
| request             | json         | NO   |     | NULL    |
| response            | json         | YES  |     | NULL    |

request 有两个属性 currencyCodeamount

{"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()

如果有人可以帮助我,我真的很感激。

【问题讨论】:

    标签: mysql json jooq


    【解决方案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));
    }
    

    【讨论】:

      猜你喜欢
      • 2022-01-22
      • 1970-01-01
      • 1970-01-01
      • 2014-09-23
      • 1970-01-01
      • 2021-02-21
      • 2018-03-25
      • 2019-07-23
      相关资源
      最近更新 更多