Mapper中多参数查询,
批量更新
参数包括String和List类型时,Strig类型的为表名,日志表以月为单位生成,(还可以使用按月表分区功能优化性能)一般使用Map方式注入参数。例如调用类:
- publicint batchUpdate(List<Logs> list,String num) {
- Map<String,Object> paramMap = new HashMap<String,Object>();
- String tableName = "logs_t"+num;
- paramMap.put("tableName", tableName);
- paramMap.put("logslist", list);
- return mapper.batchUpdateLogs(paramMap);
- }
public int batchUpdate(List<Logs> list,String num) { Map<String,Object> paramMap = new HashMap<String,Object>(); String tableName = "logs_t"+num; paramMap.put("tableName", tableName); paramMap.put("logslist", list); return mapper.batchUpdateLogs(paramMap); }
Mapper类:
int batchUpdateLogs(Map<String, Object>paramMap);
Mapper配置文件:
- <insert id="batchUpdateWorkLog" parameterType="java.util.Map">
- replace into ${tableName} (
- <include refid="Base_Column_List" />
- ) values
- <foreach collection="workLoglist" item="item" index="index" separator="," >
- (#{item.id,jdbcType=BIGINT}, #{item.ab,jdbcType=CHAR},
- #{item.assid,jdbcType=VARCHAR}
- </foreach>
- </insert>
<insert id="batchUpdateWorkLog" parameterType="java.util.Map"> replace into ${tableName} ( <include refid="Base_Column_List" /> ) values <foreach collection="workLoglist" item="item" index="index" separator="," > (#{item.id,jdbcType=BIGINT}, #{item.ab,jdbcType=CHAR}, #{item.assid,jdbcType=VARCHAR} </foreach> </insert>
在调用类里面将参数以Object类型植入Map中,传入Mapper配置文件中拼成SQL。
replace into 可以代替update tables set xx = xxx
replace into 有个大坑,在配置有主从服务器的时候会导致从库的自增主键出错,详细内容以下地址:
http://blog.xupeng.me/2013/10/11/mysql-replace-into-trap/