我正在为spring批处理使用java配置(spring boot)。我有一个员工Id列表,对于每个Id,我需要运行一个查询(如下所示),然后处理数据。
select * from history where employee_id = ?
我知道我们可以使用阅读器。setPreparedStatementSetter动态设置上述SQL中的参数。但是,我不确定如何对列表中的每个员工id重复批处理过程。即使我将reader()标记为@StepScope,也只会调用一次reader。(即),批次仅运行一次。非常感谢您的帮助。
List employeeIds = new ArrayList();
employeeIds.add(1);
employeeIds.add(2);
@Bean
@StepScope
public ItemReader<History> reader() {
JdbcCursorItemReader<History> databaseReader = new JdbcCursorItemReader<>();
databaseReader.setSql("select * from history where employee_id = ?");
databaseReader.setPreparedStatementSetter(..);
....
return databaseReader;
}
@Bean
public Step step(StepBuilder stepBuilder){
return stepBuilderFactory.get("sample").
.reader(reader())
.processor(processor())
.writer(writer())
.build();
}
所以首先,我不建议你这样做。从理论上讲,而且在实践中几乎总是这样,每次打开一个游标比单独查询要高效得多。
“更好的”方法是将ID列表插入到暂存/驱动表中(通常在前面的步骤中,每当您从原始源获得ID列表时),然后将查询更改为类似以下内容:
select * from history where employee_id in (select id from driving_table)
或者,您至少可以将查询更改为:
select * from history where employee_id in ( ? )
并将ID列表传递给它(这里要小心,因为有些数据库限制查询中的参数)。如果您的列表可能超过该限制,则需要打开一个新的光标,有效地对列表分页。
问题内容: 我有一个关于使用JdbcTemplate进行动态查询的问题。 我的代码如下: 现在,我的问题是,我想要与插入查询中的自动生成问号相同数量的“值”。 现在,值变量考虑为一个字符串,因此,如果我有2个或更多问号,则在值变量中只有一个用逗号分隔的完整字符串,因此它不起作用。 见下面我的查询: 我想要如下: 问题答案: }
问题内容: 我以前从未将golang与mysql一起使用,因此我是 第一次阅读这些内容。我想做这样的事情: 这种输入太多了,尤其是当我想 将更多变量添加到WHERE条件中时。 如果这是PHP,我将执行以下操作: 通过使用foreach循环,我可以动态生成查询并根据需要动态绑定尽可能多的变量。 像golang和mysql这样的选项吗?还是有其他选择不对查询输入每个变量组合? 问题答案: 如果您的地图
问题内容: 我正在使用Jesey在Java(JAX-RS)中实现Restful Web Service。我在Tomcat v7.0上运行它,我使用Hibernate将数据映射到数据库(MySQL)。我有一个查询来获取可交付成果的列表: 它给了我一百个可交付成果,但我想在Task表中拥有前三名。感谢您的帮助。如何修改查询? 请注意,这三个可交付成果不应重复。 与@FGreg答案存在冲突。当我使用这些
问题内容: 我正在尝试使用Mongoose制作动态条件,但是它并没有像我想象的那样起作用。 代码是这样的 如您所见,我正在尝试使用“索引”变量创建动态条件。有可能这样做吗? 先感谢您! 问题答案: 您需要分两步创建对象: 更新资料 现在,node.js 4+支持计算的属性名称,您可以一步完成此操作:
预备:代码存在于使用JPA的JavaWebApp中,并对其感到满意,因此完全脱离JPA并不是解决方案。 但我的部分是关于动态数据查询的。比如说,管理员可以编写sql查询,用户可以通过这些查询生成csv导出。 有了JDBC,我获得了很多关于ResultSet的元数据,我可以在我知道的地方获取字符串和整数。 JPA允许直接SQL查询,但我只能用作为
问题内容: 我曾尝试使用FLINQ,但F#3.0 beta版已经过时了。 有人可以给我一些关于如何在F#中创建动态SQL查询的指示吗? 问题答案: 在F#3.0中,查询会自动加引号,因此您不能使用引号拼接(语法)来构成查询。通过使用拼接来组成查询,您可以编写的大多数内容仍可以通过“常规LINQ方式”来完成,方法是从先前的源创建一个新查询并添加即过滤: 这样,您可以动态添加条件,动态指定投影(使用)