是否有一种方法可以在jOOQ中对SQL语句进行“标记”或将名称放置在其中,所以当我查看AWS的Performance时,我可以看到比语句的前500个字符更有意义的内容吗?
例如,Performance显示,此查询对我的DB造成了影响:
选择“my_schema”、“奎斯特”、“杯”、“id”、“my_schema”、“奎斯特”、“other_id”、“my_schema”、“奎斯特”、“cid_id”、“my_schema”、“奎斯特”、“valid_since”、“my_schema”、“奎斯特”、“valid_until”、“my_schema”、“奎斯特”、“地址”、“my_schema”、“杯”、“address_id_1”。“my_schema”、“宠物”、“id”、“my_schema”、“my_schema”、“cst_id”、“my_schema”、“my_schema”、“tag”、“my_schema”、“宠物”、“所有者”、“my_schema”、“宠物”、“created_on”、“my_schema”、“宠物”、“created_by”“my_schema”,“modified_on”,“modified_on”,
但是,当它被砍掉时,不知道是哪个jOOQ代码产生了这种情况。
我更希望看到这样的情景:
客户-宠物查找
或者:
(Customer - Pet Lookup)选择“my_schema”、“custs”、“id”、“my_schema”、“custs”、“other_id”、“my_schema”、“custs”、“cid_id”、“my_schema”、“custs”、“valid_since”、“my_schema”、“custs”、“valid_until”、“my_schema”、“custs”、“address”、“my_schema”、“custs”、“address_id_1”,“my_schema”、“宠物”、“id”、“my_schema”、“my_schema”、“cst_id”、“my_schema”、“my_schema”、“tag”、“my_schema”、“宠物”、“所有者”、“my_schema”、“宠物”、“created_on”、“my_schema”、“宠物”、“created_by”“my_schema”,“宠物”,“modified_on”,
发布于 2021-12-06 20:22:15
对于您想要实现的目标,至少有两种“开箱即用”的方法,这两种方法都完全与供应商无关:
1.使用“提示”
jOOQ支持使用hint()
方法的Oracle样式提示,至少对于SELECT
语句是这样。写一些类似于:
ctx.select(T.A, T.B)
.hint("/* my tag */")
.from(T)
.where(...)
这里的限制是提示的位置,它将紧跟在SELECT
关键字之后。不确定这是否适用于您的RDBMS。
2.使用ExecuteListener
您可以为您的Configuration
提供一个ExecuteListener
,该ExecuteListener
为您生成的SQL字符串提供需要添加的任何补丁:
class MyListener extends DefaultExecuteListener {
// renderEnd() is called after the SQL string is generated, but
// before the prepared statement is created, let alone executed
@Override
public void renderEnd(ExecuteContext ctx) {
if (mechanismToDetermineIfTaggingIsNeeded())
ctx.sql("/* My tag */ " + ctx.sql());
}
}
使用正则表达式,可以将该标记放置在SQL字符串中的任何特定位置。
https://stackoverflow.com/questions/70251248
复制相似问题