簡體   English   中英

如何在 MySQL 8 的 jOOQ 中實現 JSON_SET()

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM