java - Mybatis Spring Batch:如何在Tasklet中使用where子句从多个表中删除?
问题描述
我想从这样的各种表中进行多次删除:
DELETE FROM TABLE1 WHERE T1_ID = :id AND T1_CREATION_DATE IS NULL;
DELETE FROM TABLE2 WHERE T2_ID = :id AND T2_CREATION_DATE IS NULL;
COMMIT;
但有春季批次。
到目前为止,我尝试过:
String query = "DELETE FROM TABLE1 WHERE T1_ID = :id AND T1_CREATION_DATE IS NULL;"+
"DELETE FROM TABLE2 WHERE T2_ID = :id AND T2_CREATION_DATE IS NULL;"+
"COMMIT;";
@Override
public RepeatStatus execute(StepContribution contribution, ChunkContext chunkContext) throws Exception {
jobContext = stepExecution.getJobExecution().getExecutionContext();
Employee employee = (Employee) jobContext.get("employee");
Map<String, Object> parameters = new HashMap<String, Object>();
parameters.put("id", employee.getId());
new NamedParameterJdbcTemplate(dataSource).update(query,parameters);
return RepeatStatus.FINISHED;
}
它正在编译,但我遇到了一个糟糕的 SQL 语法异常,我认为这是因为 JdbcTemplates 不管理事务查询。
有什么提示吗?
PS:对于我使用Mybatis的读者和作者,有没有办法他可以处理多次删除?我试过了,但是我无法在Tasklet中使用mybatis sql语句
解决方案
感谢您的帮助,我设法使它工作。
起初,我是用这样的单独模板来做的:
protected String expDelete = "DELETE FROM TABLE1 WHERE ID = :id AND CREATION_DATE IS NULL";
protected String dipDelete = "DELETE FROM TABLE2 WHERE ID = :id AND CREATION_DATE IS NULL";
Map<String, Object> parameters = new HashMap<String, Object>();
parameters.put("id", employeeInTreatment.getId());
new NamedParameterJdbcTemplate(this.dataSource).update(expDelete,parameters);
new NamedParameterJdbcTemplate(this.dataSource).update(dipDelete,parameters);
它有点工作(编译但没有提交删除)。但我确信我可以一口气完成。
我创建了一个服务和一个指向我的 mybatis 映射器的 dao:
employeeBatchDao.deleteEmployeeImportedData(employeeId);
<delete id="deleteEmployeeImportedData" parameterType="Integer">
{call
declare
begin
DELETE FROM TABLE1 WHERE ID = :id AND CREATION_DATE IS NULL;
DELETE FROM TABLE2 WHERE ID = :id AND CREATION_DATE IS NULL;
end
}
我在我的tasklet中调用它并且它有效!现在我可以一次完成所有删除!
推荐阅读
- reactjs - 反应在数组中渲染图像数组
- javascript - 在没有初始属性的情况下更新处于 React 状态的对象的方法是什么?
- postgresql - 如何将表从 PostgreSQL 导入 SAP Hana?
- c# - Azure 逻辑应用在触发时触发两次
- javascript - 如何在reactjs中创建一个调用标签的函数?
- php - 运行php脚本并自动通过表单上传文件?
- excel - VBA将数据透视表数据复制到另一个工作表+更改标题
- javascript - Vuetify v-data-table 未显示来自 javascript api fetch 的结果
- jquery - 基于两个数据库字段返回主要字段的 JQuery 自动编译
- python - 过滤在给定列中具有超过 x 数量的 nan 值的用户