Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/402.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在Spring+;mysql_Java_Mysql_Spring_Jdbctemplate - Fatal编程技术网

Java 在Spring+;mysql

Java 在Spring+;mysql,java,mysql,spring,jdbctemplate,Java,Mysql,Spring,Jdbctemplate,目前,我们的应用程序使用Spring、SimpleJdbcTemplate和MySQL 使用的数据源是org.apache.commons.dbcp.BasicDataSource,url属性为“rewriteBatchedStatements=true” 在使用SimpleJdbcTemplate.batchUpdate(List)进行批插入期间,输入批中将存在重复记录(基于我们正在生成的表的主键) 在重复记录场景下,是否可以 1) 插入所有非重复记录并获得有关成功插入次数的响应 或 2) 完

目前,我们的应用程序使用Spring、SimpleJdbcTemplate和MySQL

使用的数据源是org.apache.commons.dbcp.BasicDataSource,url属性为“rewriteBatchedStatements=true”

在使用
SimpleJdbcTemplate.batchUpdate(List)
进行批插入期间,输入批中将存在重复记录(基于我们正在生成的表的主键)

在重复记录场景下,是否可以

1) 插入所有非重复记录并获得有关成功插入次数的响应

2) 完全回滚batchInsert,是否不应插入任何记录

我们可以使用mysql的“INSERT IGNORE”部分实现第一个需求。但是
SimpleJdbcTemplate.batchUpdate()
会将每个记录返回为已更新的记录。(无法仅捕获插入的记录计数,忽略重复项)

为了达到第二个要求,我们必须关闭“rewriteBatchedStatements”。但在性能测试后,该参数已被微调。所以我们不能将其设置为“false”

在第一行中提到的我们正在使用的组件的约束范围内,是否可能实现上述两种情况之一

我对spring和jdbc世界还不熟悉,所以详细的解释会帮助我们更好。 谢谢

1) 插入所有非重复记录并获得有关成功插入次数的响应

=>您可以插入所有非重复记录,并获得响应
batchUpdate()
返回
int[]
即整数数组,表示批(插入/更新)中受每次更新影响的行数

2) 完全回滚批插入不应插入记录

=>由于batchInsert将位于单个事务中,因此将插入所有记录或不插入任何记录。如果事务被提交,则将插入所有记录。如果发生任何异常,如果您使用spring事务管理(使用
@Transactional
注释或
基于spring aop的tx通知),事务将自动回滚。在这里确保设置了
BasicDataSource.defaultAutoCommit=false

1) 插入所有非重复记录并获得有关成功插入次数的响应

=>您可以插入所有非重复记录,并获得响应
batchUpdate()
返回
int[]
即整数数组,表示批(插入/更新)中受每次更新影响的行数

2) 完全回滚批插入不应插入记录

=>由于batchInsert将位于单个事务中,因此将插入所有记录或不插入任何记录。如果事务被提交,则将插入所有记录。如果发生任何异常,如果您使用spring事务管理(使用
@Transactional
注释或
基于spring aop的tx通知),事务将自动回滚。在这里确保设置了
BasicDataSource.defaultAutoCommit=false