我正在使用Java和Spring JDBC模板向两个表中插入n条记录。代码如下:
假设daos.xml已正确配置。
我还配置了事务管理器。
我的问题是如何使用批处理将数据插入到person和role表中。因为一个人可以有多个角色,所以当我插入person时,需要一起插入角色ID。在这种情况下,person插入查询将如下所示。
我想批量执行它,因为在我的情况下,我有至少10k人的列表需要使用文件进行解析。如果我先将角色插入表中,然后获取并再次插入人员,这可能会导致性能下降。
假设daos.xml已正确配置。
ApplicationContext ctxt = new ClassPathXmlApplicationContext("daos.xml");
JdbcTemplate template = (JdbcTemplate) ctxt.getBean("jdbcTemplate");
final List<Person> list = new ArrayList<>();
final List<Role> roles = new ArrayList<>();
for(int i =1; i<=100; i++){
Person item = new Person();
item.setFirstName("Naveen" + i);
item.setLastName("kumar" + i);
item.setDescription("D" + i);
list.add(item);
Role role = new Role();
role.setName("Admin");
role.setCode("c" + i);
roles.add(role);
}
String sql = "insert into person(first_name, last_name, description) values(?,?,?)";
int[] arr = template.batchUpdate(sql, new BatchPreparedStatementSetter() {
@Override
public void setValues(PreparedStatement ps, int i) throws SQLException {
Person person = list.get(i);
ps.setObject(1, person.getFirstName());
ps.setObject(2, person.getLastName());
ps.setObject(3, person.getDescription());
}
@Override
public int getBatchSize() {
return list.size()
}
});
我还配置了事务管理器。
我的问题是如何使用批处理将数据插入到person和role表中。因为一个人可以有多个角色,所以当我插入person时,需要一起插入角色ID。在这种情况下,person插入查询将如下所示。
String sql = "insert into person(first_name, last_name, description, role_id) values(?,?,?, ?)";
我想批量执行它,因为在我的情况下,我有至少10k人的列表需要使用文件进行解析。如果我先将角色插入表中,然后获取并再次插入人员,这可能会导致性能下降。