MyBatis foreach循环的问题

今天,弄一个很简单的sql语句,竟然花了两个小时. 当我知道答案的时候, 决定写博文记录下来.

需求: 根据一串ids 查询对应的名称.也就是根据创意id的集合查询其对应的创意名称.

来看看我是怎么写的:

<!-- 根据ids查询创意名称集合 -->
	<select id="queryCreativeNameByIds" parameterType="map" resultType="java.lang.String">
		SELECT  Creative_Name
		FROM pub_creative pc
		WHERE 1=1		
		<if test="ids != null and ids != ''">
			AND pc.creative_id in (#{ids})
		</if>
	</select>

看到这段sql是不是觉得一点问题都没有.我也是这么觉得的.再来看看java代码:

/**
	 * 根据ids查询创意名称
	 */
	@Override
	public String queryCreativeNameByIds(String ids) throws Exception {
		Map<String, Object> queryParams = new HashMap<String, Object>();
		queryParams.put("ids", ids);
		List<Object> creativeNames = this.objectDao.getObjects(PubTargetCreativeService.class.getName() + ".queryCreativeNameByIds", queryParams);
		return creativeNames.toString();
	}

这段代码很明确,就是要获取返回回来的creativeNames集合.传递过去的参数是一个map集合.可问题来了,我返回过来的creativeNames集合就是没有内容.捕捉到控制台代码,在MySQL中运行,有数据啊.

下面是捕获的控制台代码:

[DEBUG] 2015-08-27 11:30:09 :==>  Preparing: SELECT Creative_Name FROM pub_creative pc WHERE 1=1 AND pc.creative_id in (?) 
[DEBUG] 2015-08-27 11:30:09 :==> Parameters: [15131, 15123, 15124, 15040](String)

琢磨了半天,没找到原因.找同事过来一起帮忙看.原来问题在传递参数的方式.我传递过去的集合本应该是一个数组,我将其转换成一个String类型直接传递到后台了.表面看是没有问题的,实际上myBatis将其当成一个参数处理了(我猜的).所以始终没有得到正确结果.

你可能感兴趣的:(java,mybatis)