使用JOOQ在mysql中查询json字段 使用jOOQ 3.14的JSON_VALUE支持在jOOQ 3.13和更早版本中使用普通SQL模板

问题描述

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

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

请求具有两个属性 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()

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

解决方法

使用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) {
  DSL.field("json_extract({0},{1})",String.class,field,DSL.inline(jsonPath));
}

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...