Spring batch 通过spring批处理删除记录

Spring batch 通过spring批处理删除记录,spring-batch,Spring Batch,我有一个记录档案 我必须开发一个spring批处理程序,它将读取文件并从数据库表中删除相同的记录 是否可以通过ItemWriter运行删除查询???更新或删除操作之间没有区别,只有sql更改;所以你的问题的简单答案是肯定的。 假设您正在从Book表中删除,下面的代码片段可能有助于满足基本需求 public class BookJdbcItemWriter implements ItemWriter<Book> { private static final Strin

我有一个记录档案

我必须开发一个spring批处理程序,它将读取文件并从数据库表中删除相同的记录


是否可以通过ItemWriter运行删除查询???

更新或删除操作之间没有区别,只有sql更改;所以你的问题的简单答案是肯定的。 假设您正在从Book表中删除,下面的代码片段可能有助于满足基本需求

public class BookJdbcItemWriter implements ItemWriter<Book> {

        private static final String DELETE_BOOK = "delete from Book where id = ?";

        private JdbcTemplate jdbcTemplate;

        public BookJdbcItemWriter(DataSource dataSource) {
                this.jdbcTemplate = new JdbcTemplate(dataSource);
        }

        public void write(List<? extends Book> items) throws Exception {
                for(Book item : items) {
                        int updated = jdbcTemplate.update(DELETE_BOOK,item.getId());                                                           
                }
        }
}
公共类BookJdbcItemWriter实现ItemWriter{
私有静态最终字符串DELETE_BOOK=“DELETE from BOOK where id=?”;
私有JdbcTemplate JdbcTemplate;
PublicBookJDBCItemWriter(数据源数据源){
this.jdbcTemplate=新的jdbcTemplate(数据源);
}

public void write(List更新或删除操作之间没有区别,只有sql发生了变化;所以简单地回答您的问题就是“是”。 假设您正在从Book表中删除,下面的代码片段可能有助于满足基本需求

public class BookJdbcItemWriter implements ItemWriter<Book> {

        private static final String DELETE_BOOK = "delete from Book where id = ?";

        private JdbcTemplate jdbcTemplate;

        public BookJdbcItemWriter(DataSource dataSource) {
                this.jdbcTemplate = new JdbcTemplate(dataSource);
        }

        public void write(List<? extends Book> items) throws Exception {
                for(Book item : items) {
                        int updated = jdbcTemplate.update(DELETE_BOOK,item.getId());                                                           
                }
        }
}
公共类BookJdbcItemWriter实现ItemWriter{
私有静态最终字符串DELETE_BOOK=“DELETE from BOOK where id=?”;
私有JdbcTemplate JdbcTemplate;
PublicBookJDBCItemWriter(数据源数据源){
this.jdbcTemplate=新的jdbcTemplate(数据源);
}

public void write(Listserkan的答案是正确的,但是使用批处理sql还有更多的可能性

  • 您可以使用jdbc模板来代替普通的jdbc模板
  • 您可以直接使用see示例代码
  • 带有spring批处理xml配置和java代码的代码示例

    <bean id="itemWriter" class="org.springframework.batch.item.database.JdbcBatchItemWriter">
        <property name="dataSource" ref="dataSource" />
        <property name="sql">
            <!-- Why CDATA? 
    
                 because < etc. is not allowed for xml values
                 when you use &lt; xml parser will work, but
                 now the sql won't because of the & spring assumes
                 a placeholder, see
                 - AbstractSqlPagingQueryProvider.init(...)
                 - JdbcParameterUtils.countParameterPlaceholders(...)
    
                 -->
            <value>
                <![CDATA[
                    DELETE FROM TEST
                    WHERE id = ? 
                    and sub.id = ?
                    and ... 
                ]]>
            </value>
        </property>
        <property name="itemPreparedStatementSetter">
            <bean class="...FieldSetItemPreparedStatementSetter" />
        </property>        
    </bean>
    
    /**
     * Implementation for {@link ItemPreparedStatementSetter}, 
     * sets the values from {@link FieldSet}.
     * 
     */
    public class FieldSetItemPreparedStatementSetter implements ItemPreparedStatementSetter<FieldSet> {
    
        /** {@inheritDoc} */
        @Override
        public void setValues(FieldSet item, PreparedStatement ps) throws SQLException {
            for (int i = 0; i < item.getValues().length; i++) {
                // PreparedStatements start with 1
                ps.setObject(i + 1, item.getValues()[i]);
            }
        }
    }
    
    
    /**
    *{@link ItemPreparedStatementSetter}的实现,
    *设置{@link FieldSet}中的值。
    * 
    */
    公共类FieldSetItemPreparedStatementSetter实现ItemPreparedStatementSetter{
    /**{@inheritardoc}*/
    @凌驾
    public void setValues(FieldSet项,PreparedStatement ps)引发SQLException{
    对于(int i=0;i
    Serkan的答案是正确的,但使用批处理sql还有更多的可能性

  • 您可以使用jdbc模板来代替普通的jdbc模板
  • 您可以直接使用see示例代码
  • 带有spring批处理xml配置和java代码的代码示例

    <bean id="itemWriter" class="org.springframework.batch.item.database.JdbcBatchItemWriter">
        <property name="dataSource" ref="dataSource" />
        <property name="sql">
            <!-- Why CDATA? 
    
                 because < etc. is not allowed for xml values
                 when you use &lt; xml parser will work, but
                 now the sql won't because of the & spring assumes
                 a placeholder, see
                 - AbstractSqlPagingQueryProvider.init(...)
                 - JdbcParameterUtils.countParameterPlaceholders(...)
    
                 -->
            <value>
                <![CDATA[
                    DELETE FROM TEST
                    WHERE id = ? 
                    and sub.id = ?
                    and ... 
                ]]>
            </value>
        </property>
        <property name="itemPreparedStatementSetter">
            <bean class="...FieldSetItemPreparedStatementSetter" />
        </property>        
    </bean>
    
    /**
     * Implementation for {@link ItemPreparedStatementSetter}, 
     * sets the values from {@link FieldSet}.
     * 
     */
    public class FieldSetItemPreparedStatementSetter implements ItemPreparedStatementSetter<FieldSet> {
    
        /** {@inheritDoc} */
        @Override
        public void setValues(FieldSet item, PreparedStatement ps) throws SQLException {
            for (int i = 0; i < item.getValues().length; i++) {
                // PreparedStatements start with 1
                ps.setObject(i + 1, item.getValues()[i]);
            }
        }
    }
    
    
    /**
    *{@link ItemPreparedStatementSetter}的实现,
    *设置{@link FieldSet}中的值。
    * 
    */
    公共类FieldSetItemPreparedStatementSetter实现ItemPreparedStatementSetter{
    /**{@inheritardoc}*/
    @凌驾
    public void setValues(FieldSet项,PreparedStatement ps)引发SQLException{
    对于(int i=0;i