如下,插入一条记录的时候可以这样返回id(一下代码只是说明事例):
[code="java"]
//保存一个test对象,并返回该对象
public Test save(Test test){
KeyHolder keyHolder = new GeneratedKeyHolder();
getJdbcTemplate().update(new PreparedStatementCreator() {
@Override
public PreparedStatement createPreparedStatement(
Connection con) throws SQLException {
PreparedStatement ps = con.prepareStatement("insert into tb_test (name,sex) values (?,?)",
Statement.RETURN_GENERATED_KEYS);
ps.setString(1, test.getName());
ps.setString(2, test.getSex());
return ps;
}
}, keyHolder);
//这里可以获得数据库id
test.setId(Integer.valueOf(keyHolder.getKeyList().get(0)
.toString()));
return test;
}
// 批量插入,
public List saveOrUpdateAll(final List list) {
getJdbcTemplate().batchUpdate(
"insert into tb_test (name,sex) values (?,?)",
new BatchPreparedStatementSetter() {
@Override
public void setValues(PreparedStatement ps, int i)
throws SQLException {
ps.setString(1, list.get(i).getName());
ps.setString(2, list.get(i).getSex());
}
@Override
public int getBatchSize() {
return list.size();
}
});
//哪个方法可以获得list中每个test对象的id?我不想重新进行查询
return list;
}
[/code]
spring JdbcTemplate批量插入 怎么获得数据库自动增长的id
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
3条回答 默认 最新
- 「已注销」 2010-07-02 11:19关注
spring这个批量插入有点限制,比如你这个特殊需要,我感觉它实现不了,所以你用我上面说的那个方法迂回实现。我感觉性能方面应该不会有太大的影响。你看spring的批量插入的时候这个BatchPreparedStatementSetter借口的方法setValues(PreparedStatement ps, int i) ,提供了一个索引i,它肯定也遍历了,要么怎么知道i的值。所以有特殊需求的时候就用上面那种方案,没有的时候推荐用spring提供了批量操作,我们项目中就这么做的。
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报
悬赏问题
- ¥15 根据以下文字信息,做EA模型图
- ¥15 删除虚拟显示器驱动 删除所有 Xorg 配置文件 删除显示器缓存文件 重启系统 可是依旧无法退出虚拟显示器
- ¥15 vscode程序一直报同样的错,如何解决?
- ¥15 关于使用unity中遇到的问题
- ¥15 开放世界如何写线性关卡的用例(类似原神)
- ¥15 关于并联谐振电磁感应加热
- ¥60 请查询全国几个煤炭大省近十年的煤炭铁路及公路的货物周转量
- ¥15 请帮我看看我这道c语言题到底漏了哪种情况吧!
- ¥60 关机时蓝屏并显示KMODE_EXCEPTION_NOT_HANDLED,怎么修?
- ¥66 如何制作支付宝扫码跳转到发红包界面