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

对于快速学习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
<iterate 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
    <iterate property="inParam" open="(" close=")" conjunction=",">
    #inParam[]#
    </iterate>
</select>

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

 

使用举例:

<delete id="deleteRPRByQRIDS" parameterClass="java.lang.String" >

 

    delete from RECORD_PERSON_RELATION

    where QRID in ($qrIDs$)

</delete>

 

其中,qrIDs的形式为:

对于数据库表里的相应字段为字符型时:'1','2','3'

对于数据库表里的相应字段为整型时:1,2,3

其它类型以此类推。

 

注意:这里用"$",而不用”#“

posted @ 2014-01-15 10:44  google4y  阅读(931)  评论(0编辑  收藏  举报
不在家,就在公司,不在公司,就在去公司的路上,無家無根,如風如萍,只有漂