假设sqlserver数据库中一张表有5个字段java代码中通过存储过程批量插入到该表并回显id的操作并显示mapperxml的代码
mapper.xml代码如下:
<insert id="insertBatch" parameterType="java.util.List">
<selectKey keyProperty="id" order="AFTER" resultType="java.lang.Integer">
SELECT SCOPE_IDENTITY() AS id
</selectKey>
INSERT INTO table_name (field1, field2, field3, field4, field5)
VALUES
<foreach collection="list" item="item" separator=",">
(#{item.field1}, #{item.field2}, #{item.field3}, #{item.field4}, #{item.field5})
</foreach>
</insert>
Java代码如下:
public void insertBatch(List<Entity> list) {
try {
Connection conn = dataSource.getConnection();
CallableStatement cstmt = conn.prepareCall("{call insert_batch(?, ?, ?, ?, ?, ?)}"); // 存储过程名
for (Entity entity : list) {
cstmt.setString(1, entity.getField1());
cstmt.setString(2, entity.getField2());
cstmt.setInt(3, entity.getField3());
cstmt.setDate(4, entity.getField4());
cstmt.setDouble(5, entity.getField5());
cstmt.registerOutParameter(6, Types.INTEGER); // 注册输出参数
cstmt.addBatch();
}
cstmt.executeBatch();
ResultSet rs = cstmt.getResultSet();
while (rs.next()) {
int id = rs.getInt(1); // 获取回显的id
// do something
}
rs.close();
cstmt.close();
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
``
原文地址: https://www.cveoy.top/t/topic/hbZo 著作权归作者所有。请勿转载和采集!