跟踪程序,看看in后面的内容
|
|
debug跟踪了,是356,357(String),console 输出的 09:43:06,333 DEBUG queryListPage:46 - ==> Preparing: select CONTENT_ATTACHMENT_ID, CONTENT_ID, CONTENT_ATTACHMENT_NAME, CONTENT_ATTACHMENT_TYPE, CONTENT_ATTACHMENT_LINK, CONTENT_ATTACHMENT_DESCRIPTION, CONTENT_SOFTWARE_PRODUCT_PLATFORM, CONTENT_VERSION, DOWNLOAD_TIMES, UPDATE_DATE, UPDATE_USER, INSERT_DATE, INSERT_USER, DEL_FLAG from bim_content_attachment where bim_content_attachment.DEL_FLAG = 0 and bim_content_attachment.CONTENT_ATTACHMENT_ID in (?) limit 0,10 09:43:06,334 DEBUG queryListPage:46 - ==> Parameters: 356,357(String) 拿这条语句去数据库执行了 确实能查询出来两条记录 |
|
20分 |
你穿进去的参数应该是这样的‘’,‘’,‘’,‘’而不应该是‘,,,,’
|
debug看了contentAttachmentIdStr是“356,357”的 |
|
bim_content_attachment.CONTENT_ATTACHMENT_ID in (356,357),确定执行是这样?
|
|
你parametertype是啥,id集合数组?拼接id逗号分割字符串?我一般传list或数组,然后用foreach标签
|
|
我在程序xml的sql 直接这样写了 bim_content_attachment.CONTENT_ATTACHMENT_ID in (356,357) 这样程序就返回了两条 |
|
tableName.CONTENT_ATTACHMENT_ID
in (#{contentAttachmentIdStr})有问题的 mybatis会把#{contentAttachmentldStr}会把#{}里面的东西看成一个字符串‘356,357’的 |
|
那就是mybatis执行时候,不是按这个处理的 |
|
那我在后台组织这个字符串应该是什么样式的呢? |
|
在调用SQL前打印contentAttachmentldStr,看看他是什么内容,然后等价替换#{contentAttachmentldStr},看看得到什么SQL
|
|
我试了下 因为我定义的contentAttachmentldStr是String 类型,CONTENT_ATTACHMENT_ID 是Long,所以程序自动为他加了引号 ,成了这样的 bim_content_attachment.CONTENT_ATTACHMENT_ID in (""356,357"") 现在就是不知道该怎么来去掉两个单引号 |
|
估计是你resultMap写错了
|
|
resultMap 没有错,返回了一条记录,不是两条 |
|
在传值前,就把单引号过滤掉
|
|
我觉得你应该拼成””356″”,””357″”才对吧?另外,传入map的时候,不可以指定类型的么 |
|
<![CDATA[。。。。。sql]]>
你sql加这个试试 |
|
看tableName.CONTENT_ATTACHMENT_ID 数据类型是什么,如果是数字,传 356,357,如果是字符,传””356″”,””357″”
|
|
正确方式:
select * from test where id in <foreach collection=”list” item=”item” index=”index” separator=”,” open=”(” close=”)”> #{item} </foreach> 我手写的,应该这样写的才对 list就是你的356,357 separator属性定义的”,”就是你传递到参数分割符。比如传递参数:356|357那么separator=”|”就可以了 |