简体   繁体   English

JAVA如何使用JOOQ逐步构建SQL查询

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

In my Java code, I want to create a long query, I find JOOQ to build query and I use it without generation class but I don't find the way to build my query step by step like this: 在我的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();

How to make this ? 如何做到这一点?

You have many options. 您有很多选择。

Stick with the DSL API 坚持使用DSL API

... and assign the intermediate types to a local variable: ...并将中间类型分配给局部变量:

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();

Use the model API instead 改用模型API

... This kind of dynamic SQL is probably easier to implement using the model API (see also http://www.jooq.org/doc/latest/manual/sql-building/sql-statements/dsl-and-non-dsl ) ...使用模型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();

Use a batch statement 使用批处理语句

An alternative would be to send a batch of multiple individual statements to the server by using the batch API ( http://www.jooq.org/doc/latest/manual/sql-execution/batch-execution ). 一种替代方法是使用批处理API( http://www.jooq.org/doc/latest/manual/sql-execution/batch-execution )将一批多个单独的语句发送到服务器。 For example: 例如:

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

... or, in a more dynamic form: ...或者以更动态的形式:

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