2
我有一个存储过程,旨在插入单行。我就可以以下列方式(例如简化)操作与Hibernate:带存储过程的休眠批处理
public void store(int param1, int param2) {
Connection con = session.connection(); // obtain JDBC connection from Session object
CallableStatement stmt = con.prepareCall("{ call changesalary(?,?) }");
stmt.setInt(1, param1); // first parameter index start with 1
stmt.setInt(2, param2); // second parameter
stmt.execute(); // call stored procedure
cleanup(con, stmt);
}
我不知道是否有可能重新使用在多个批次的一致好评方式这个存储过程,而无需修改它(我不有可能添加新的存储过程或修改现有的)。我想这样做:
public void batchStore(int[] params1, int[] params2) {
for (int i = 0; i < params1.length; i++) {
store(params1[i], params2[i]);
}
}
public void store(int param1, int param2) {
Connection con = session.connection();
CallableStatement stmt = con.prepareCall("{ call changesalary(?,?) }");
stmt.setInt(1, param1);
stmt.setInt(2, param2);
stmt.execute();
cleanup(con, stmt);
}
但为了避免大量调用数据库的,我宁愿要准备一套报表,那后来我批到数据库中的一个电话:
public void store(int[] params1, int[] params2) {
Connection con = session.connection();
CallableStatement[] stmts = new CallableStatements[params.size];
for (int i = 0; i < params1.length; i++) {
CallableStatement stmt = con.prepareCall("{ call changesalary(?,?) }");
stmt.setInt(1, params1[i]);
stmt.setInt(2, params2[i]);
stmts[i] = stmt;
}
con.executeStatements(stmts);
}
可以实现上面的伪代码吗?我可以通过这样做来提高性能吗?
谢谢,工作完美! – aksamit