ibatis配置文件中两个$中间夹字符串什么意思
3个回答
展开全部
在通常情况下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)
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)
展开全部
1.#是把传入的数据当作字符串,如#field#传入的是id,则sql语句生成是这样,order by "id",这当然会报错..
2.$传入的数据直接生成在sql里,如#field#传入的是id,则sql语句生成是这样,order by id, 这就对了.
$方式一般用于传入数据库对象.例如传入表名.
#方式一般用于传入插入/更新的值或查询/删除的where条件
2.$传入的数据直接生成在sql里,如#field#传入的是id,则sql语句生成是这样,order by id, 这就对了.
$方式一般用于传入数据库对象.例如传入表名.
#方式一般用于传入插入/更新的值或查询/删除的where条件
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
{key:'aaa',value:'123'} 也就是说输出一个key为aaa的参数,可以是成员aaa(属性),也可以是Hashtable 里边的一项
$aaa$ 输出参数是以字符串方式直接输出 123
#aaa# 输出参数是以Parameter方式输出 @aaa
$aaa$ 输出参数是以字符串方式直接输出 123
#aaa# 输出参数是以Parameter方式输出 @aaa
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询