问题描述
我有一个交易表,它有一个名为“ 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));
}