[英]How to implement JSON_SET() in jOOQ for MySQL 8
我有一個帶有 JSON col 的表
--------------------------------------
Col1 | Col2 | JSON_col | Key1 | Key2 |
--------------------------------------
JSON_Col 的結構是 Map,所以在 DB 中是 {0: {data here}}
我有一個要求來實現這樣的事情:
update <table> set JSON_Col = JSON_SET(JSON_Col, $.key1, data1, $.key2, data2)
where <condition>
我怎么能在 jOOQ 中寫這樣的東西。
在 jOOQ 的未來版本中,我們將支持額外的內置JSON
功能, JSON_SET
可能是其中的一部分(參見 #10018 )。
從 jOOQ 3.12 開始,您可以像往常一樣使用純 SQL 模板編寫自己的 jOOQ 擴展,在不支持某些特定於供應商的功能時,例如
public static Field<JSON> jsonSet(Field<JSON> field, Map<String, String> map) {
StringBuilder sb = new StringBuilder();
String separator = "";
int i = 1;
for (var e : map.entrySet()) {
sb.append(separator);
sb.append("$.").append(e.getKey()).append(", {").append(i++).append("}");
separator = ", ";
}
List<QueryPart> queryParts = new ArrayList<>();
queryParts.add(field);
for (var v : map.values())
queryParts.add(DSL.val(v));
return DSL.field("json_set({0}, " + sb.toString() + ")",
field.getDataType(),
queryParts.toArray(new QueryPart[0]));
}
然后,像這樣使用它:
ctx.update(TABLE)
.set(TABLE.JSON_COL, jsonSet(TABLE.JSON_COL, Map.of("key1", "data1", "key2", "data2")))
.where(...)
.execute();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.