怎么在ibatis使用$往in里面传String参数

licasion 2014-11-05 05:48:54
我将参数设置成 bizCode="'BIZ-NATIONAL-SOUTUDI','BIZ-NATIONAL-DEFUALT'";
在ibatis里面<select id="queryListTblBcsShare" parameterType="com.ums.bcs.front.model.Share" resultMap="ShareResultMap">
select BIZ_ID,
BIZ_CODE,
DETAIL_ID,
IS_CUS_URL,
BIZ_CLIENT_VERSION,
BIZ_STATUS,
SHARE_URL,
SHARE_TYPE
from TBL_BCS_SHARE
where (BIZ_CODE in (${bizCode} $)
and SHARE_TYPE=#{shareType,jdbcType=VARCHAR})
or (BIZ_CODE is null
and SHARE_TYPE=#{shareType,jdbcType=VARCHAR})
or(BIZ_CODE=#{bizCode,jdbcType=VARCHAR}
and SHARE_TYPE is null)
or(BIZ_CODE is null and SHARE_TYPE is null)
order by BIZ_CODE nulls last,SHARE_TYPE nulls last
</select>

然后在控制台报错:
BIZ_CODE,
DETAIL_ID,
IS_CUS_URL,
BIZ_CLIENT_VERSION,
BIZ_STATUS,
SHARE_URL,
SHARE_TYPE
from TBL_BCS_SHARE
where (BIZ_CODE in ('BIZ-NATIONAL-SOUTUDI','BIZ-NATIONAL-DEFUALT' $)
and SHARE_TYPE=?)
or (BIZ_CODE is null
and SHARE_TYPE=?)
or(BIZ_CODE=?
and SHARE_TYPE is null)
or(BIZ_CODE is null and SHARE_TYPE is null)
order by BIZ_CODE nulls last,SHARE_TYPE nulls last
17:44:32.706 INFO [bio-8080-exec-3] c.h.c.m.i.p.DiclectStatementHandlerInterceptor - ----pra:com.ums.bcs.front.model.Share@bc3ed6
17:44:32.706 INFO [bio-8080-exec-3] c.h.c.m.i.p.DiclectStatementHandlerInterceptor - ---------------------------------------------------------
17:44:32.846 INFO [bio-8080-exec-3] o.s.b.f.xml.XmlBeanDefinitionReader - Loading XML bean definitions from class path resource [org/springframework/jdbc/support/sql-error-codes.xml]
17:44:32.906 INFO [bio-8080-exec-3] o.s.j.support.SQLErrorCodesFactory - SQLErrorCodes loaded: [DB2, Derby, H2, HSQL, Informix, MS-SQL, MySQL, Oracle, PostgreSQL, Sybase]
org.springframework.jdbc.BadSqlGrammarException:
### Error querying database. Cause: java.sql.SQLException: ORA-00911: 无效字符

如果用 select BIZ_ID,
BIZ_CODE,
DETAIL_ID,
IS_CUS_URL,
BIZ_CLIENT_VERSION,
BIZ_STATUS,
SHARE_URL,
SHARE_TYPE
from TBL_BCS_SHARE
where (BIZ_CODE in (${bizCode})
and SHARE_TYPE=#{shareType,jdbcType=VARCHAR})
or (BIZ_CODE is null
and SHARE_TYPE=#{shareType,jdbcType=VARCHAR})
or(BIZ_CODE=#{bizCode,jdbcType=VARCHAR}
and SHARE_TYPE is null)
or(BIZ_CODE is null and SHARE_TYPE is null)
order by BIZ_CODE nulls last,SHARE_TYPE nulls last

这样就只有一个值了,
在控制台输出:
BIZ_CODE,
DETAIL_ID,
IS_CUS_URL,
BIZ_CLIENT_VERSION,
BIZ_STATUS,
SHARE_URL,
SHARE_TYPE
from TBL_BCS_SHARE
where (BIZ_CODE in (BIZ-NATIONAL-SOUTUDI)
and SHARE_TYPE=?)
or (BIZ_CODE is null
and SHARE_TYPE=?)
or(BIZ_CODE=?
and SHARE_TYPE is null)
or(BIZ_CODE is null and SHARE_TYPE is null)
order by BIZ_CODE nulls last,SHARE_TYPE nulls last
17:47:13.774 INFO [bio-8080-exec-3] c.h.c.m.i.p.DiclectStatementHandlerInterceptor - ----pra:com.ums.bcs.front.model.Share@129efd0
17:47:13.774 INFO [bio-8080-exec-3] c.h.c.m.i.p.DiclectStatementHandlerInterceptor - ---------------------------------------------------------
17:47:13.824 INFO [bio-8080-exec-3] o.s.b.f.xml.XmlBeanDefinitionReader - Loading XML bean definitions from class path resource [org/springframework/jdbc/support/sql-error-codes.xml]
17:47:13.885 INFO [bio-8080-exec-3] o.s.j.support.SQLErrorCodesFactory - SQLErrorCodes loaded: [DB2, Derby, H2, HSQL, Informix, MS-SQL, MySQL, Oracle, PostgreSQL, Sybase]
org.springframework.jdbc.BadSqlGrammarException:
### Error querying database. Cause: java.sql.SQLException: ORA-00904: "SOUTUDI": 标识符无效

### The error may involve com.ums.bcs.front.dao.ShareDao.queryListTblBcsShare-Inline
### The error occurred while setting parameters
### Cause: java.sql.SQLException: ORA-00904: "SOUTUDI": 标识符无效

应该怎么写啊?求大神指教
...全文
1443 18 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
小光滚雪球 2017-06-07
  • 打赏
  • 举报
回复
IN (${expfuncCode})
wangyue_111 2015-06-15
  • 打赏
  • 举报
回复
in($bizCode$)
licasion 2014-11-21
  • 打赏
  • 举报
回复
虽然结贴了,但是该问题还是木有解决额,楼主还是用的foreach,如果有知道怎么做的大神还请告诉下哈。
程序袁_哈哈 2014-11-14
  • 打赏
  • 举报
回复
from TBL_BCS_SHARE where (BIZ_CODE in ('BIZ-NATIONAL-SOUTUDI','BIZ-NATIONAL-DEFUALT' $) and SHARE_TYPE=?) 多有个$号, 后面的$号不要 改成 where (BIZ_CODE in ('BIZ-NATIONAL-SOUTUDI','BIZ-NATIONAL-DEFUALT' )
百里马 2014-11-13
  • 打赏
  • 举报
回复
用$肯定可以的,ibatis根本不会修改你传入的值,只可能是你传值出错
suciver 2014-11-13
  • 打赏
  • 举报
回复
foreach用#{}不要用${}。
一旦 2014-11-13
  • 打赏
  • 举报
回复
直接 in ( $xxx$ ) 可以吧。我以前项目就这么做。
  • 打赏
  • 举报
回复
引用 6 楼 licasion 的回复:
引用 4 楼 yiran_ming 的回复:
为什么不用#{aaa}
不能用#{aaa},#是带""的,在in里面会报错的
'${aaa}' 加单引号
licasion 2014-11-12
  • 打赏
  • 举报
回复
楼主没办法,后面就改用Iterator,但是用Iterator也报错,很奇怪,最后实在没办法了,就用的foreach....
licasion 2014-11-12
  • 打赏
  • 举报
回复
引用 5 楼 smile_to_life 的回复:
在参数外面加上""试试,比如说BIZ_CODE in ("${bizCode} $")
那这样和用#{aaa}有什么区别呢
licasion 2014-11-12
  • 打赏
  • 举报
回复
引用 4 楼 yiran_ming 的回复:
为什么不用#{aaa}
不能用#{aaa},#是带""的,在in里面会报错的
静昕菲武 2014-11-12
  • 打赏
  • 举报
回复
实在不行就用foreach吧
licasion 2014-11-12
  • 打赏
  • 举报
回复
引用 9 楼 yiran_ming 的回复:
引用 6 楼 licasion 的回复:
[quote=引用 4 楼 yiran_ming 的回复:] 为什么不用#{aaa}
不能用#{aaa},#是带""的,在in里面会报错的
'${aaa}' 加单引号[/quote]也不行,不能在外面家引号, ----sql:select BIZ_ID, BIZ_CODE, DETAIL_ID, IS_CUS_URL, BIZ_CLIENT_VERSION, BIZ_STATUS, SHARE_URL, SHARE_TYPE from TBL_BCS_SHARE where BIZ_CODE in ('one,two,three') and share_type =? 14:26:27.422 INFO [io-8080-exec-10] c.h.c.m.i.p.DiclectStatementHandlerInterceptor - ----pra:com.ums.bcs.front.model.Share@12a1062 14:26:27.422 INFO [io-8080-exec-10] c.h.c.m.i.p.DiclectStatementHandlerInterceptor - ---------------------------------------------------------
「已注销」 2014-11-11
  • 打赏
  • 举报
回复
在参数外面加上""试试,比如说BIZ_CODE in ("${bizCode} $")
  • 打赏
  • 举报
回复
为什么不用#{aaa}
licasion 2014-11-06
  • 打赏
  • 举报
回复
木有大神不幸福
licasion 2014-11-06
  • 打赏
  • 举报
回复
有木有大神在啊
licasion 2014-11-05
  • 打赏
  • 举报
回复
求大神指教啊

67,550

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧