您的位置:首页 > 数据库

ibatis(sqlmap)中使用in语句的方法

2014-06-18 11:14 435 查看
对于快速学习ibatis而没有过多时间去查阅资料的朋友,比如我,可能有些东西不一定能在快速上手的文档中涉猎到。今天就碰到一个问题,要在分页查询的同时进行where语句删选操作。由于表记录比较少,因此采用了in语句,但是in语句所设计的字段是number型的,因此在拼凑出in后面括号所需的内容时,出现了错误。说内容不是数字还是说不能为字符串,有点忘了,反正就是吧拼凑的in里的内容当成字符串‘’了。
解决:在sqlmap文件中不使用“#VALUE#”来原样(参数对应什么类型,就当什么类型,比如拼凑的内容为string则自动加上了‘’)读取,而是$VALUE$方式来读取,即不加任何的东西,比如单引号啥的,而是原样添加到sqlmap文件的sql语句中。如此,则OK了。

以下为#与$的使用区别:

$中间的变量就是直接替换成值的

#会根据变量的类型来进行替换

比如articleTitle的类型是string, 值是"标题"的时候

$articleTitle$ = 标题

#articleTitle# = '标题'

----------------------------------------

然后从别人那查到还有个复杂点的方法,当然用在in语句方面不如拼凑语句来得方便,但是在其他时候也许有用,先记录下来:

ibatis中如何配置in语句,需要迭代,不能直接用string的写法

<select id="sql_test" parameterclass="myPramBean" resultclass="myResult">

select *from tablewhere name in

< iterat
4000
e property="ids" conjunction="," close=")" open="(" />

#value[]#

< /iterate>

and code=#code#

< /select>

myPramBean

{

private String code;

private List ids;

...

}

eg:

<select
id="testtt" parameterClass="java.util.Map">
    SELECT * FROM productnav WHERE id IN
<iterateproperty="inParam" open="("
close=")" conjunction=",">
    #inParam[]#
</iterate>
</select>

然后in语句可能是动态的,因此使用了dynamic标签,结合使用即可满足多数需求。

使用举例:
<deleteid="deleteRPRByQRIDS"parameterClass="java.lang.String">

delete from RECORD_PERSON_RELATION
where QRID in ($qrIDs$)
</delete>

其中,qrIDs的形式为:
对于数据库表里的相应字段为字符型时:'1','2','3'
对于数据库表里的相应字段为整型时:1,2,3
其它类型以此类推。

注意:这里用"$",而不用”#“
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息