如何解决使用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));
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。