标签:java mybatis
今天,弄一个很简单的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
原文地址:http://bingzhe.blog.51cto.com/2389237/1688790