簡體   English   中英

JAVA如何使用JOOQ逐步構建SQL查詢

[英]JAVA How to build a sql query with JOOQ step by step

在我的Java代碼中,我想創建一個長查詢,找到JOOQ來構建查詢,並且在沒有生成類的情況下使用它,但是我找不到這樣逐步構建查詢的方法:

DSLContext request = DSL.using(sqlConnection, SQLDialect.MYSQL);
request.insertInto(DSL.table("MyTable"), DSL.field("MyColumn1"), DSL.field("MyColumn2"));

// ... some code ...

request.values("hello", 98);

// ... some code ...

request.values("world", 67);

// ... some code ...

request.execute();

如何做到這一點?

您有很多選擇。

堅持使用DSL API

...並將中間類型分配給局部變量:

DSLContext request = DSL.using(sqlConnection, SQLDialect.MYSQL);
InsertValuesStep2<?, Object, Object> step = request.insertInto(
    DSL.table("MyTable"), DSL.field("MyColumn1"), DSL.field("MyColumn2"));

// ... some code ...

step = step.values("hello", 98);

// ... some code ...

step = values("world", 67);

// ... some code ...

step.execute();

改用模型API

...使用模型API可能更容易實現這種動態SQL(另請參見http://www.jooq.org/doc/latest/manual/sql-building/sql-statements/dsl-and-non- dsl

DSLContext request = DSL.using(sqlConnection, SQLDialect.MYSQL);
InsertQuery<?> insert = request.insertQuery(DSL.table("MyTable"));

// ... some code ...

insert.addValue(DSL.field("MyColumn1", String.class), "hello"))
insert.addValue(DSL.field("MyColumn1", Integer.class), 98))

// ... some code ...

insert.newRecord();
insert.addValue(DSL.field("MyColumn1", String.class), "world"))
insert.addValue(DSL.field("MyColumn1", Integer.class), 67))

// ... some code ...

insert.execute();

使用批處理語句

一種替代方法是使用批處理API( http://www.jooq.org/doc/latest/manual/sql-execution/batch-execution )將一批多個單獨的語句發送到服務器。 例如:

request.batch(DSL.insertInto(
                    DSL.table("MyTable"), DSL.field("MyColumn1"), DSL.field("MyColumn2"))
                 .values((String) null, null))
       .bind("hello", 98)
       .bind("world", 67)
       .execute();

...或者以更動態的形式:

List<Object[]> values = new ArrayList<>();

// ... some code ...
values.add(new Object[] { "hello", 98 });

// ... some code ...
values.add(new Object[] { "world", 67});

request.batch(DSL.insertInto(
                    DSL.table("MyTable"), DSL.field("MyColumn1"), DSL.field("MyColumn2"))
                 .values((String) null, null))
       .bind(values.toArray(new Object[list.size()][]))
       .execute();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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