Ibatis批量更新資料(mysql資料庫)

mameng1998發表於2018-04-11

最近遇到需要批量update資料的問題,一開始用了一個for迴圈去update,資料量大的時候效率很低。原因是for迴圈每次update一條語句,都是一次連線過程。遇到大批資料更新的時候,效率就可想而知了。

1、xml

<update id="updateList" parameterClass="student(類的全限定名稱的別名)">
        UPDATE student
        SET
             student_name               = #studentName#
            ,student_age                  = #studentAge#
            ,update_by                 = #updateBy#
            ,update_time               = NOW()
        WHERE   id= #id#

    </update>

2、dao介面及其實現類,這裡將dao介面省略,只寫實現類

import org.springframework.orm.ibatis.SqlMapClientTemplate;

import java.sql.SQLException;

import java.util.List;
import org.springframework.orm.ibatis.SqlMapClientCallback;
import com.ibatis.sqlmap.client.SqlMapExecutor;

public class StudentDaoImpl {

    protected SqlMapClientTemplate sqlMapClient;
    public void setSqlMapClient(SqlMapClientTemplate sqlMapClient) {
        this.sqlMapClient = sqlMapClient;
    }
    public void updateList(final List<Student> list) throws SQLException {

    if(list != null) {
    sqlMapClient.execute(new SqlMapClientCallback() {
    public Object doInSqlMapClient(SqlMapExecutor executor) throws SQLException {
    executor.startBatch();
    for(int i=0;i<list.size();i++) {
    executor.update("student.updateList", list.get(i));
    }
    executor.executeBatch();
    return null;
    }
});
    }
}

}

相關文章