Springboot整合JDBC批量删除修改

本文介绍如何使用Spring框架的JdbcTemplate和BatchPreparedStatementSetter进行批量数据操作,包括插入、更新和删除,通过具体示例展示了批量操作的实现方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

repository类

import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.BatchPreparedStatementSetter;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Component;

@Component
public class EquimentModifyBatch {

    @Autowired
    private JdbcTemplate jdbcTemplate;

 

/**
 * 批量添加数据
 */
public int batchCreateArticle(final List<Article> articles) {
    String sql = "INSERT INTO article(title, description) VALUES(?, ?)";
    // spring jdbc 帮我们生成了批量插入的 sql 语句, 我们也可以直接使用批量的插入 sql 语句进行批量数据插入
    // return jdbcTemplate.batchUpdate(new String[]{sql});
    return jdbcTemplate.batchUpdate(sql, new BatchPreparedStatementSetter() {
        @Override
        public void setValues(PreparedStatement preparedStatement, int i) throws SQLException {
            Article article = articles.get(i);
            preparedStatement.setString(1, article.getTitle());
            preparedStatement.setString(2, article.getDescription());
        }

        @Override
        public int getBatchSize() {
            return articles.size();
        }
    }).length;
}

 

    /**
     * 批量修改数据
     */
    public int batchModfiyEquipment(final List<Equipment> equipments) {
        if (equipments == null || equipments.size() == 0) {
            return 0;
        }
        String sql = "UPDATE equipment SET status = ? WHERE equ_id = ?";
        // spring jdbc 帮我们生成了批量插入的 sql 语句, 我们也可以直接使用批量的插入 sql 语句进行批量数据插入
        return jdbcTemplate.batchUpdate(sql, new BatchPreparedStatementSetter() {
            @Override
            public void setValues(PreparedStatement preparedStatement, int i) throws SQLException {
                Equipment equipment = equipments.get(i);
                preparedStatement.setInt(1, equipment.getStatus());
                preparedStatement.setString(2, equipment.getEquId());
            }

            @Override
            public int getBatchSize() {
                return equipments.size();
            }
        }).length;
    }

 /**
     * 批量删除数据
     */

public int batchDeleteArticle(final List<Integer> ids) {
    String sql = "DELETE FROM article WHERE id = ?";
    // spring jdbc 帮我们生成了批量插入的 sql 语句, 我们也可以直接使用批量的插入 sql 语句进行批量数据插入
    return jdbcTemplate.batchUpdate(sql, new BatchPreparedStatementSetter() {
        @Override
        public void setValues(PreparedStatement preparedStatement, int i) throws SQLException {
            preparedStatement.setInt(1, ids.get(i));
        }

        @Override
        public int getBatchSize() {
            return ids.size();
        }
    }).length;

}

}

service层

equipments = equipmentService.getEquiByRedis();// 从缓存中获取所有设备
        // 循环处理每一台设备
        for (Equipment equipment : equipments) {
            String equId = equipment.getEquId();
            int equStatus = UnionPayHeartbeatUtil.getEquStatus(equId, configService.getEquipmentHeartbeatTimeout(),
                    client);
            EquipmentOffline equipmentOffline = get(equId, listNotRecovered);
            if (-1 == equStatus) {
                if (null == equipmentOffline) {
                    equipmentOffline = equipmentOfflineService.offline(equId, "", "");
                } else {
                    if (equipment.getStatus() != equStatus) {
                        equipment.setStatus(-1);
                        if (equipment.getUploadStatus() != -1) {
                            equipment.setUploadStatus(-1);
                        }
                        equipmentModifyList.add(equipment);
                    }
                }
            } 
        }

        equimentModifyBatch.batchModfiyEquipment(equipmentModifyList);

 

### 如何在Spring Boot项目中使用TDengine实现批量删除功能 在Spring Boot项目中,通过JDBC驱动程序可以方便地操作TDengine数据库。以下是基于提供的引用以及专业知识来说明如何实现批量删除的功能。 #### 1. 引入必要的依赖 首先,在`pom.xml`文件中引入TDengine JDBC驱动的相关依赖[^1]: ```xml <dependency> <groupId>com.taosdata.jdbc</groupId> <artifactId>taos-jdbcdriver</artifactId> <version>3.2.4</version> </dependency> ``` 此依赖允许应用程序连接到TDengine并执行SQL语句。 --- #### 2. 配置数据源 配置`application.properties`或`application.yml`中的数据源信息以便于与TDengine建立连接。例如: ```properties spring.datasource.url=jdbc:TAOS://localhost:6030/your_database_name?charset=UTF-8&locale=en_US.UTF-8&timezone=UTC+8 spring.datasource.username=root spring.datasource.password= spring.datasource.driver-class-name=com.taosdata.jdbc.TSDBDriver ``` 以上配置指定了数据库URL、用户名、密码以及其他必要参数。 --- #### 3. 编写批量删除逻辑 利用JDBC的批处理能力,可以通过以下代码片段实现批量删除功能。注意,TDengine支持标准SQL语法,因此可以直接编写DELETE语句[^1]。 ##### 示例代码 下面是一个简单的Java类,用于演示如何在Spring Boot中实现批量删除功能: ```java import org.springframework.beans.factory.annotation.Autowired; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.stereotype.Service; import java.util.List; @Service public class TDEngineBatchDeleteService { @Autowired private JdbcTemplate jdbcTemplate; /** * 执行批量删除操作 * * @param table 表名 * @param ids 要删除的数据ID列表 */ public void batchDelete(String table, List<String> ids) { String deleteSqlTemplate = "DELETE FROM %s WHERE id = ?"; try { // 构建最终的SQL模板 String finalSql = String.format(deleteSqlTemplate, table); // 使用batchUpdate方法完成批量删除 Object[][] params = new Object[ids.size()][]; for (int i = 0; i < ids.size(); i++) { params[i] = new Object[]{ids.get(i)}; } int[] resultCounts = jdbcTemplate.batchUpdate(finalSql, params); System.out.println("受影响的记录数:" + resultCounts.length); } catch (Exception e) { throw new RuntimeException("批量删除失败", e); } } } ``` 在此代码中: - `jdbcTemplate.batchUpdate()` 方法被用来执行批量SQL命令。 - SQL语句动态构建以适应不同的表结构和条件[^1]。 --- #### 4. 测试批量删除功能 创建一个测试用例验证上述服务是否正常工作。例如: ```java import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import java.util.Arrays; import java.util.List; @SpringBootTest public class TDEngineBatchDeleteTest { @Autowired private TDEngineBatchDeleteService tdEngineBatchDeleteService; @Test public void testBatchDelete() { String tableName = "test_table"; List<String> idsToDelete = Arrays.asList("id1", "id2", "id3"); tdEngineBatchDeleteService.batchDelete(tableName, idsToDelete); } } ``` 运行该单元测试即可确认批量删除功能的有效性。 --- #### 5. 注意事项 - **性能优化**:如果要删除大量数据,建议分批次提交事务而不是一次性加载所有数据进入内存[^4]。 - **并发控制**:当多个线程同时访问同一张表时,需考虑锁机制的影响[^2]。 - **索引管理**:确保目标字段已设置为主键或其他唯一约束,否则可能引发意外行为。 --- ### 结论 通过合理配置数据源、编写高效的SQL脚本以及充分利用Spring框架内置工具(如`JdbcTemplate`),可以在Spring Boot环境中轻松实现针对TDengine的大规模批量删除需求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值