spring JdbcTemplate批量插入 怎么获得数据库自动增长的id
2个回答
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();
@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();
2015-07-19 · 知道合伙人软件行家
关注
展开全部
通过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解决)。
拿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解决)。
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询