最近再看开源项目阿里巴巴的数据库同步项目Otter https://github.com/alibaba/otter的时候,看到里面很多时候都使用了JdbcTemplate 来对数据进行相应的数据操作。
这里写一个使用批操作的batchUpdate()的例子,来自spring-jdbctemplate-batchupdate-example
需要使用批操作来操作数据库的数据。
第一种用法:
//insert batch example
public void insertBatch(final List<Customer> customers){
String sql = "INSERT INTO CUSTOMER " +
"(CUST_ID, NAME, AGE) VALUES (?, ?, ?)";
getJdbcTemplate().batchUpdate(sql, new BatchPreparedStatementSetter() {
@Override
public void setValues(PreparedStatement ps, int i) throws SQLException {
Customer customer = customers.get(i);
ps.setLong(1, customer.getCustId());
ps.setString(2, customer.getName());
ps.setInt(3, customer.getAge() );
}
@Override
public int getBatchSize() {
return customers.size();
}
});
}
第二种用法(当然你可以直接运行sql语句):
//insert batch example with SQL
public void insertBatchSQL(final String sql){
getJdbcTemplate().batchUpdate(new String[]{sql});
}
Spring的配置文件
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">
<bean id="customerDAO" class="com.mkyong.customer.dao.impl.JdbcCustomerDAO">
<property name="dataSource" ref="dataSource" />
</bean>
<bean id="dataSource"
class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="com.mysql.jdbc.Driver" />
<property name="url" value="jdbc:mysql://localhost:3306/mkyongjava" />
<property name="username" value="root" />
<property name="password" value="password" />
</bean>
</beans>
运行:
package com.mkyong.common;
import java.util.ArrayList;
import java.util.List;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.mkyong.customer.dao.CustomerDAO;
import com.mkyong.customer.model.Customer;
public class App
{
public static void main( String[] args )
{
ApplicationContext context =
new ClassPathXmlApplicationContext("Spring-Customer.xml");
CustomerDAO customerDAO = (CustomerDAO) context.getBean("customerDAO");
Customer customer1 = new Customer(1, "mkyong1",21);
Customer customer3 = new Customer(2, "mkyong2",22);
Customer customer2 = new Customer(3, "mkyong3",23);
List<Customer>customers = new ArrayList<Customer>();
customers.add(customer1);
customers.add(customer2);
customers.add(customer3);
customerDAO.insertBatch(customers);
String sql = "UPDATE CUSTOMER SET NAME ='BATCHUPDATE'";
customerDAO.insertBatchSQL(sql);
}
}
相关推荐
其中,`JdbcTemplate`是Spring JDBC模块的核心组件,为数据库操作提供了简单、灵活的API。这篇博客文章的标题"打印JdbcTemplate执行sql"主要涉及如何在使用`JdbcTemplate`时,追踪并打印出执行的SQL语句,这对于调试...
jdbcTemplate.batchUpdate(sql, batchArgs); } ``` 6. 防止SQL注入 JdbcTemplate使用PreparedStatement来执行SQL,自动防止SQL注入攻击,因为它会正确地转义参数值。 7. 错误处理 如果数据库操作失败,...
然而,为了保证性能,需要注意合理使用批处理(batch processing)和连接池(connection pool)等技术,以及避免过度使用JdbcTemplate的查询方法,以免导致过多的数据库连接和资源消耗。 在实际项目中,我们还可以...
- 对于批量插入或更新,Spring JDBC提供了`batchUpdate()`方法,可以有效地提高性能。 5. **异常处理**: - Spring JDBC将JDBC的异常转换为Spring的`DataAccessException`家族,使得异常处理更加统一和简单。 6....
在这个例子中,我们使用了`JdbcTemplate`的`batchUpdate`方法来进行批量更新操作,并且在调用该方法之前关闭了`Connection`对象的自动提交功能。如果在执行过程中发生了异常,比如主键冲突导致的插入失败,那么所有...
首先,JdbcTemplate的`batchUpdate`方法是用于批量执行SQL语句的,如示例所示。在上述代码中,`batchUpdate`接收一个SQL语句的字符串数组,然后依次执行这些语句。例如,删除角色关联菜单的记录,接着插入新的关联...
`jdbcTemplate`提供了多种方法,如`queryForObject()`, `queryForList()`, `update()`, `batchUpdate()`等,以满足各种数据库操作需求,如查询单行数据、多行数据、执行更新或插入操作。这些方法简化了异常处理,并...
JdbcTemplate还支持批处理,通过`batchUpdate()`方法可以一次执行多条SQL语句,提高性能。 在实际项目中,结合使用JdbcTemplate和Spring的其他组件(如DAO层、Service层)可以构建出高效、稳定的数据库访问层。在...
在`JdbcDaoSupport`中,我们可以通过`JdbcTemplate`的`batchUpdate(String sql, BatchPreparedStatementSetter setter)`方法来实现这个功能。`BatchPreparedStatementSetter`是一个接口,我们需要实现它的`setValues...
3. **批处理操作**:batchUpdate()方法支持批处理操作,一次提交多个SQL语句,提高数据库操作效率。 4. **参数绑定**:使用占位符?进行参数绑定,避免SQL注入风险。例如,`update("INSERT INTO table (name, age) ...
`SimpleJdbcTemplate`还提供了其他实用方法,如`queryForList`用于获取多个结果,`call`用于调用存储过程,以及`batchUpdate`用于执行批处理更新等。这些方法都极大地简化了数据库操作,降低了出错的可能性。 在...
- **void batchUpdate(String sql, List[]> batchArgs)** 执行批量更新操作,用于处理大量数据的插入或更新。 ##### 2.3 其他常用方法 - **int execute(String sql, PreparedStatementCallback action)** 执行...
7. **Batch Updates**: 支持批量SQL更新操作,通过`batchUpdate()`方法可以一次提交多条SQL语句,提高性能。 8. **CallableStatements**: 对于存储过程的调用,Spring-JDBC提供了CallableStatement的支持,可以使用...
Spring 出品的 JdbcTemplate 对于不想使用hibernate或者ibatis那样需要大量学习成本而且还想获得对象化的人来说是很好用的。但是 JdbcTemplate还是有很多不足之处或者说是缺点。比如你没法像hibernate那样直接传一个...
通过`JdbcTemplate`的`batchUpdate(String sql, BatchPreparedStatementSetter setter)`方法,我们可以批量执行插入、更新或删除操作。 总的来说,SpringJDBC通过提供强大的抽象和模板方法,使数据库操作变得简单而...