Sti*_*ing 6 java mysql spring spring-jdbc
我正在使用java,spring jdbc模板将n条记录插入到两个表中.有些像这样
假设正确配置了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()
}
});
Run Code Online (Sandbox Code Playgroud)
我也配置了事务管理器.
所以我的问题是如何使用批处理将数据插入到人员和角色表中.因为人可以有角色.当我插入人物时,它需要角色id插入在一起.在这种情况下,人物插入查询将如下所示.
String sql = "insert into person(first_name, last_name, description, role_id) values(?,?,?, ?)";
Run Code Online (Sandbox Code Playgroud)
我想将它分批处理.因为在我的情况下,我有最小的10k人名单来解析使用文件.因此,它可以成为一个性能杀手,我将角色插入表中而不是获取它并再次插入人物.
您可以使用multilane语句和LAST_INSERT_ID()MySql函数:
String sql = "insert into role(name, code) values(?,?);" +
"insert into person(first_name, last_name, description, role_id) values(?,?,?,(SELECT LAST_INSERT_ID()));";
int[] arr = template.batchUpdate(sql, new BatchPreparedStatementSetter() {
@Override
public void setValues(PreparedStatement ps, int i) throws SQLException {
Role role = roles.get(i);
Person person = list.get(i);
ps.setObject(1, role.getName());
ps.setObject(2, role.getCode();
ps.setObject(3, person.getFirstName());
ps.setObject(4, person.getLastName());
ps.setObject(5, person.getDescription());
}
@Override
public int getBatchSize() {
return list.size()
}
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
15284 次 |
| 最近记录: |