@Override
public Integer handleAlarmBatchRecovery(Map<String, Object> paramMap) {
String idString = (String)paramMap.get("auuid");//旧告警id,sac告警id,新告警auuid
String[] idList = idString.split(",");
List<String> list = Arrays.asList(idList);
Integer alarmType = (int) paramMap.get("alarmType");
Integer code = 0;
Map<String,Object> alarm = new HashMap<>();
String tableName = null;
String colName = "status";
Integer colValue = 0;
String id = "id";
alarm.put("list", list);
try {
if(alarmType==1){//旧告警类型
tableName = "t_door_lock_alarm_info";
// alarmDetailsInfoMapper.handleOldAlarmRecovery(list);
}else if(alarmType==2){//sac告警类型
tableName = "t_sac_alarm";
// alarmDetailsInfoMapper.handleSacAlarmRecovery(list);
}else if(alarmType==3){//统一告警类型
tableName = "t_common_alarm";
colName = "astatus";
id = "auuid";
colValue = 3;
// alarmDetailsInfoMapper.handleEsdAlarmRecovery(list);
}
alarm.put("tableName", tableName);
alarm.put("colName", colName);
alarm.put("colValue", colValue);
alarm.put("id", id);
alarmDetailsInfoMapper.handleUnifiedRecovery(alarm);
} catch (Exception e) {
code = 1;
e.printStackTrace();
}
return code;
}
要实现动态调用表名和字段名,就不能使用预编译了,需添加statementType="STATEMENT"" 。
statementType:STATEMENT(非预编译),PREPARED(预编译)或CALLABLE中的任意一个。 这就告诉 MyBatis 分别使用Statement,PreparedStatement或者CallableStatement。 默认:PREPARED。这里显然不能使用预编译,要改成非预编译。
<update id="handleUnifiedRecovery" parameterType="java.util.Map" statementType="STATEMENT">
UPDATE ${tableName}
set
${colName} = ${colValue}
where ${id} in
<foreach collection="list" item="item" index="index" separator="," open="(" close=")">
${item}
</foreach>
</update>
注意点:
1、sql里的变量取值是${xxx},不是#{xxx}。
2、如果${xxx}传入的参数为字符串数据,需在参数传入前加上引号,exam:
String name = "sprite"; name = "'" + name + "'";
或者在xml这样写:
因为我们传的参数值(除去表名、表字段)的引号也被去掉了,我们需要在给参数加上引号,此时我们可以使用转义符:' 是单引号,
<update id="obsoleteWeigh" statementType="STATEMENT"> update ${tableName} set iobsolete = 1,update_date = '${date}' where reg_id in <foreach item="id" collection="ids" separator="," open="(" close=")" index=""> '${id}' </foreach> </update>
(1)转义序列字符之间不能有空格;
(2) 转义序列必须以”;”结束;
(3) 单独出现的”&”不会被认为是转义的开始;
(4) 区分大小写。