如何使用基于 jsontype 属性的 jOOQ 从数据库中检索数据
Posted
技术标签:
【中文标题】如何使用基于 jsontype 属性的 jOOQ 从数据库中检索数据【英文标题】:How to retrieve data from database using jOOQ based on jsontype properties 【发布时间】:2022-01-11 09:59:00 【问题描述】:我们有一个带有 json 类型地址列的 Employee 表,如下所述
员工表:
如何使用jOOQ根据地址栏中的城市名称检索员工详细信息?
【问题讨论】:
【参考方案1】:你可以使用jOOQ内置的JSON_VALUE()
支持:
ctx.selectFrom(EMPLOYEE)
.where(cast(jsonValue(EMPLOYEE.ADDRESS, "$.city"), VARCHAR).eq("\"Mumbai\""))
.fetch();
这是假设您使用代码生成并具有通常的静态导入:
import static org.jooq.impl.DSL.*;
import static org.jooq.impl.SQLDataType.*;
如果您需要对 jOOQ 不支持的任何其他特定于供应商的 JSON 函数(目前)的支持,请改用普通 SQL 模板。
但是,这种方法不太可能利用索引,所以如果可以的话,我建议对这些数据进行规范化。
【讨论】:
不起作用,它总是返回 0 行。我已经使用 getSQL() 函数来查看带有 cast() 的输出: selectemployee
.name
from employee
where cast(json_extract(employee
.address
, ?) as char) = ?选择employee
.name
from employee
where cast(json_extract(employee
.address
, "$.city") as char) = "Delhi";总是返回 0 行
是的,我的错。提取的内容是 JSON 字符串,而不是 SQL 字符串。再试一次更新的答案,另见dbfiddle
工作!!我有另一种方法,它也可以在没有转义字符 ctx.selectFrom(EMPLOYEE) .where(DSL.field("json_extract(employee
.address
, "$.car")", VARCHAR) 的情况下使用。 eq("孟买")) .fetch();
是的,当然,您可以随时使用纯 SQL 模板以上是关于如何使用基于 jsontype 属性的 jOOQ 从数据库中检索数据的主要内容,如果未能解决你的问题,请参考以下文章