ibatis配置文件中两个$中间夹字符串什么意思

 我来答
XpVeda
2011-06-22
知道答主
回答量:14
采纳率:0%
帮助的人:12.8万
展开全部
在通常情况下ibatis的参数在sqlmap中使用#param#的形式,参数名以’#‘包着,但当使用
sql的like语句时就发生了问题,在单引号中无法使用#param#这种形式。解决办法有:
1.当应用select * from table1 where col like ’%value%’时,如果要把‘value’以参数代替,可以把整个like后面的字符串全改为参数。即:select * from table1 where col like #param# ,此时参数param的值为字符串'%value%'
2.使用‘$’将参数名包起来。例如:name like ‘%#name#%’。我们的解决方法有2。
(a)把name like ‘%#name#%’的#换成$,即:name like ‘%$name$%’。
(b)用||连接字符串的方式,写成,name like ‘%’|| #name#‘%’。
在iBatis中,对于in子句的标准做法是采用动态sql来解决的。具体方法大致是:Java代码传入一个List或者数组,然后在sqlMapConfig映射中使用iterate循环取这个变量,动态地生成sql语句。
这个标准解法的缺点是,使用起来比较麻烦
1. 需要在sqlMapConfig中使用动态语句
2. 需要传入一个Iterable的变量
对于这个问题,我使用了一个偷懒的办法,就是使用$标记。
在iBatis中,普通的变量,比如:v,是使用#号,在这个例子中,就是:#v#。
这样,iBatis会使用prepareStatement,并对变量进行变量绑定。
而$符号是简单替代的用法,在数据库的执行效率上要比前一种差。但优点就是简单方便。
比如:
SELECT * FROM emp WHERE emp_no in ($empString$);
而empString的值就是1, 2, 3. 在Log中,可以看到,Sql语句就是:SELECT * FROM emp WHERE emp_no in (1,2,3)
愛要怎么说出来
2011-06-24
知道答主
回答量:4
采纳率:0%
帮助的人:0
展开全部
1.#是把传入的数据当作字符串,如#field#传入的是id,则sql语句生成是这样,order by "id",这当然会报错..
2.$传入的数据直接生成在sql里,如#field#传入的是id,则sql语句生成是这样,order by id, 这就对了.
$方式一般用于传入数据库对象.例如传入表名.
#方式一般用于传入插入/更新的值或查询/删除的where条件
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
霜之
2011-06-22 · TA获得超过187个赞
知道小有建树答主
回答量:134
采纳率:0%
帮助的人:142万
展开全部
{key:'aaa',value:'123'} 也就是说输出一个key为aaa的参数,可以是成员aaa(属性),也可以是Hashtable 里边的一项
$aaa$ 输出参数是以字符串方式直接输出 123
#aaa# 输出参数是以Parameter方式输出 @aaa
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式