哪位有时间帮我优化一下这个方法,因为执行完需要40秒左右
参数 funcCodeList有80条记录是固定的
public void createProjFuncTest(Long projStaffId, List funcCodeList){
if (funcCodeList != null) {
int len = funcCodeList.size();
for (int i = 0; i < len; i++) {
Misfunc misfunc = (Misfunc) funcCodeList.get(i);
// 项目员工功能权限
ProjStaffFunc projStaffFunc = new ProjStaffFunc();
projStaffFunc.setFuncCode(misfunc.getMisfuncCode());
projStaffFunc.setProjStaffId(projStaffId);
// 创建项目员工的功能权限
Long projEmpFuncId = new Long(super.getNextIdFromSequence());
String sql = "insert into " + "\r\n " + " SYS_PROJ_STAFF_FUNC( "// 项目员工功能权限表
+ "\r\n " + " PROJ_EMP_FUNC_ID " + "\r\n " // 项目员工功能ID
+ " , PROJ_STAFF_ID " + "\r\n " // 项目员工ID
+ " , MISFUNC_CODE " + "\r\n " // 功能代码
+ " ) " + "\r\n " + "values( " + "\r\n " + " ? " + "\r\n "
+ " , ? " + "\r\n " + " , ? " + "\r\n " + " ) " + "\r\n ";
Object[] value = new Object[] { projEmpFuncId,
projStaffFunc.getProjStaffId(), projStaffFunc.getFuncCode() };
getJdbcTemplate().update(sql, value);
}
}
}
------解决方案--------------------大部分时间应该消耗在数据库的更新上了吧, 把表主键贴一下
------解决方案--------------------两个办法
1.别在循环里面做数据库连结,可在再方法的参数中巴connection传进去
2.使用Statement的批处理机制
stm.addBatch();
stm.executeBatch();
Spring得JDBC模版也要看场合来用的,虽然在代码量上作了很大的精简,但有时性能方面却不能令人满意啊
------解决方案--------------------up!
------解决方案--------------------新手发帖 乱说的啊
这快批处理没试过,但我刚做的东西直接用
insertrow都没这么慢的,应该把连接拿出去 做一次连接后 后边直接insert就可以了吧
------解决方案--------------------可以考虑用存储过程去实现数据库的插入,然后在程序中调用存储过程