spring JdbcTemplate批量插入 怎么获得数据库自动增长的id

 我来答
育知同创教育
2016-02-02 · 百度知道合伙人官方认证企业
育知同创教育
1【专注:Python+人工智能|Java大数据|HTML5培训】 2【免费提供名师直播课堂、公开课及视频教程】 3【地址:北京市昌平区三旗百汇物美大卖场2层,微信公众号:yuzhitc】
向TA提问
展开全部
spring JdbcTemplate批量例子:
@Override
public void saveBatch(final List<Employee> employeeList) {
final int batchSize = 500;

for (int j = 0; j < employeeList.size(); j += batchSize) {

final List<Employee> batchList = employeeList.subList(j, j + batchSize > employeeList.size() ? employeeList.size() : j + batchSize);

getJdbcTemplate().batchUpdate(QUERY_SAVE,
new BatchPreparedStatementSetter() {
@Override
public void setValues(PreparedStatement ps, int i)
throws SQLException {
Employee employee = batchList.get(i);
ps.setString(1, employee.getFirstname());
ps.setString(2, employee.getLastname());
ps.setString(3, employee.getEmployeeIdOnSourceSystem());
}

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

主键自动增加可以在db层面建立sequence来实现,在插入的时候这么写:
Long newPersonId = holder.getKey().longValue();
杜爷1号
2015-07-19 · 知道合伙人软件行家
杜爷1号
知道合伙人软件行家
采纳数:4973 获赞数:9186
毕业于福建农林大学,本科学士学位。从事IT行业3年,曾参与过多个大型项目的需求调研、软件研发。

向TA提问 私信TA
展开全部
通过sql语句实现,新增一个序列,假设为xx_seq,你的sql语句把那列直接写成xx_seq.nextval就行了。
拿oracle为例,其它的数据库应该都差不多
新增序列例:
CREATE SEQUENCE student_seq
INCREMENT BY 1 -- 每次加几个
START WITH 1 -- 从1开始计数
NOMAXVALUE -- 不设置最大值
NOCYCLE -- 一直累加,不循环
CACHE 10;
假设你要插入的表student有两列,一列为id,一列为name。那么你的sql语句就可以写成insert into student values (student_seq .nextval, ?); 也就是说你用jdbcTemplate只需要设置name的值就行了,id是通过调用序列来插入的(即交给oracle解决)。
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式