zoukankan      html  css  js  c++  java
  • 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

    其它类型以此类推。

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

  • 相关阅读:
    第零次作业
    第一本书的学习笔记
    第一次作业
    第零次作业
    第一周作业
    第零次作业回复
    第零次作业
    第一周作业
    第0次作业
    第一次作业
  • 原文地址:https://www.cnblogs.com/google4y/p/3520339.html
Copyright © 2011-2022 走看看