mybatis和oracle的问题. 20C

select
a.name,
a.salary,
${text} text
from table a

类似这种的sql,mybatis传递过来的text参数如果是单纯的一个字符串可以正常执行,
但是现在的问题是text里的参数为:('aaa','bbb','ccc')这样的格式。所以执行就非法了。
请问该怎么写呢。因为我级联查询,需要像其他mapper查询传递参数
图片说明
图片说明

8个回答

这种传参的话,一般我们会使用 list/map/数组 来进行传参然后在 mapper 中使用foreach 循环来去 map 中的值来拼接,举个例子:

  <foreach item="item" index="index" collection="list" open="(" separator="," close=")">  
            #{item}  
 </foreach>  

'aaa','bbb','ccc'换成'aaa,bbb,ccc'

$ 换成 # 试一下

aaa','bbb','ccc'以集合的形式传,在xml用循环获取

举个例子:
<!-- 动态foreach -->

SELECT * FROM USER

<!-- 自定义类List集合 变量 开始 结束 分割 -->

#{id}

<!-- and id in (1,10,16) -->


这样应该可以

这块我之前遇到过这样试试 加上单引号
![图片说明](https://img-ask.csdn.net/upload/201806/14/1528908745_799480.png)图片说明

图片说明

如果需要在查询结果中输出"'a','b','c'"(不包含双引号),需要进行如下转义:

SELECT '\'a\',\'b\',\'c\'' text FROM DUAL;

题主在MyBatis映射文件中用了美元符号($),而美元符号取值时仅仅是替换原参数,不会做任何修改优化:
···
SELECT (${text}) text FROM DUAL;
···
传入"'a','b','c'"后变为:
···
SELECT ('a','b','c') text FROM DUAL;
···
这个SQL语句在加了括号的情况下会报错,括号去掉后又得不到想要的结果。

解决:
尝试把美元符号($)替换为井号(#),如果不行,那只能对参数中的单引号进行转义了。

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!