code: public int[] batchUpdate(List<? extends Model> modelList, int batchSize) {
      	if (modelList == null || modelList.size() == 0)
      		return new int[0];
      	
      	Model model = modelList.get(0);
      	Table table = TableMapping.me().getTable(model.getClass());
      	String[] pKeys = table.getPrimaryKey();
      	Map<String, Object> attrs = model._getAttrs();
      	List<String> attrNames = new ArrayList<String>();
      	// the same as the iterator in Dialect.forModelSave() to ensure the order of the attrs
      	for (Entry<String, Object> e : attrs.entrySet()) {
      		String attr = e.getKey();
      		if (config.dialect.isPrimaryKey(attr, pKeys) == false && table.hasColumnLabel(attr))
      			attrNames.add(attr);
      	}
      	for (String pKey : pKeys)
      		attrNames.add(pKey);
      	String columns = StrKit.join(attrNames.toArray(new String[attrNames.size()]), ",");
      	
      	// update all attrs of the model not use the midifyFlag of every single model
      	Set<String> modifyFlag = attrs.keySet();	// model.getModifyFlag();
      	
      	StringBuilder sql = new StringBuilder();
      	List<Object> parasNoUse = new ArrayList<Object>();
      	config.dialect.forModelUpdate(TableMapping.me().getTable(model.getClass()), attrs, modifyFlag, sql, parasNoUse);
      	return batch(sql.toString(), columns, modelList, batchSize);
      }
docs: Batch update models using the attrs names of the first model in modelList.
  Ensure all the models can use the same sql as the first model.