`

IBATIS中关于<iterate>和‘$’与‘#’的应用

阅读更多
IBATIS中关于iterate和‘$’与‘#’的应用

一个包含List元素的HashMap参数赋给sqlMap
public int getCountById(String id, String title, List ids) throws Exception {  
        Map paramMap=new HashMap();  
        paramMap.put("id", id);  
        paramMap.put("title", title);  
        paramMap.put("ids",ids);  
        return (int) this.sqlMapClient.queryForObject("getCountById", paramMap);  
    } 
上面的ids元素是一个List,里面包含了一个id列表。id和title都是String。

<select id="getOrderformByBiOid" parameterClass="java.util.HashMap" resultMap="Result">  
        select *   
        from MYTABLE     
        <dynamic prepend="where">  
           <isNotNull prepend="and" property="id">  
             ID=#id#  
           </isNotNull>  
           <isNotNull prepend="and" property="title">  
             TITLE like '%$title$%' 
           </isNotNull>  
           <isNotNull prepend="and" property="ids">  
             IDS in  
            <iterate  property="ids" open="(" close=")" conjunction=",">  
             #ids[]#  
            </iterate>  
           </isNotNull>  
        </dynamic>  
        order by TIME DESC  
    </select> 
在上面的sqlMap中要注意的地方有两个。第一个地方是,<iterate>标签中一定要记得写property="ids",不要因为在上面的
<isNotNull prepend="and" property="ids">标签中判断了该属性,就在<iterate>这个标签中忽略了property的书写(如果你忘了
写iterate中的property属性的话系统会报这样的错误Cause: com.ibatis.sqlmap.client.SqlMapException: ParameterObject or
property was not a Collection, Array or Iterator.),并且要记住,
#ids[]# 中的‘[]’符号,只有这样ibatis才把ids作为一个可迭代的对象(list,数组...),不然的话ibatis会把ids作为普通的string来处理。
第二个地方就是,上面的关于‘$‘与‘#’的应用。
            下面就来说说关于‘$‘与‘#’的应用。在通常情况下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标签

    标题中的“ibatis&lt;iterate&gt;标签”指的是在iBATIS框架中用于动态SQL的一个关键功能。iBATIS是一个优秀的持久层框架,它允许将SQL语句直接嵌入到Java代码中,简化了数据库操作。而`&lt;iterate&gt;`标签是iBATIS提供的一个...

    ibatis list

    `&lt;iterate&gt;`标签是iBatis中用于循环遍历集合的一种机制,它允许你在SQL语句中动态生成参数列表,这对于批量操作(如批量插入、更新或删除)尤为重要。该标签支持多种属性,包括`property`、`conjunction`、`open`、`...

    ibatis dynamic 用法

    4. **`&lt;iterate&gt;`**:用于循环迭代一个集合中的元素。 #### 三、`&lt;dynamic&gt;` 标签详解 `&lt;dynamic&gt;` 标签是最常用的动态 SQL 标签之一,它可以包含其他子标签,并支持 `prepend`, `open`, `close` 属性。 - **`...

    iBatis操作

    iBatis可以非常简单地配置和映射原生信息,将接口和Java的POJOs(Plain Old Java Objects,普通的Java对象)映射成数据库中的记录。 在iBatis中实现批量操作通常涉及到以下几个关键步骤: 1. **配置文件**:定义SQL...

    ibatis批量处理

    在实际应用中,通常会将iBatis与Spring框架结合使用,利用Spring提供的事务管理能力。在这种情况下,可以通过Spring的AOP(面向切面编程)特性自动处理事务的开启、提交和回滚等操作。 示例代码如下: ```java ...

    ibatis 动态代理dtd

    - **ibatis**: 是一个开源的数据访问层框架,主要用于Java应用程序与数据库之间的交互。 - **动态代理DTD**: Document Type Definition(文档类型定义)是一种用于定义XML文档结构的规范。这里的“动态代理DTD”特指...

    Ibatis常用sql语句

    根据给定的文件信息,以下是对“Ibatis常用SQL语句”的详细解析,涵盖了一系列Ibatis在数据操作中的应用实例。 ### Ibatis简介 Ibatis是一个支持普通SQL查询、存储过程以及高级映射的优秀持久层框架。Ibatis可以让...

    Ibatis查询Id列表.doc

    根据提供的文档信息,我们可以深入探讨Ibatis框架中的一个具体应用场景:如何通过动态SQL查询特定条件下的ID列表。本文将从以下几个方面进行详细解析: ### 一、Ibatis简介 Ibatis是一个基于Java的持久层框架,它...

    ibatis批量存储

    iterate标签的基本语法是`&lt;iterate property="collectionName" open="(" close=")" conjunction=","/&gt;`,其中`property`指定了集合属性的名称,`open`和`close`定义了循环开始和结束的符号,`conjunction`则是元素...

    ibatis资料

    在"Ibatis动态查询例子(#和$以及iterate等的用法) - Java - JavaEye论坛.mht"这个文件中,可能包含了JavaEye社区成员关于Ibatis动态查询的深入讨论和示例。这些讨论可能涵盖了实际开发中的问题和解决方案,比如如何...

    struts+spring+ibatis(SSI)的最简分页及标签

    总结起来,"struts+spring+ibatis(SSI)的最简分页及标签"是一个关于如何在Java Web开发中结合Struts的MVC架构、Spring的依赖管理和iBatis的数据访问来实现分页功能以及创建自定义标签的实践。这个过程涉及到Struts的...

    iBATIS实战

    书中既详实地介绍了iBATIS的设计理念和基础知识,也讨论了动态SQL、高速缓存、DAD框架等高级主题,还讲解了iBATIS在实际开发中的应用。书的最后给出了一个设计优雅、层次清晰的示例程序JGameStore,该示例涵盖全书的...

    程序员常见的WEB安全漏洞.pptx

    3. 对于`IN`关键字,使用迭代器 `&lt;iterate&gt;` 避免直接拼接。 **XSS攻击** XSS是指攻击者在网页中插入恶意脚本,当用户访问含有恶意脚本的页面时,脚本被执行,从而达到攻击目的。常见的实例包括评论、贴图和AJAX回...

    Java框架面试题总结

    - `&lt;logic:iterate&gt;`:循环遍历集合。 **13. JSP中动态INCLUDE与静态INCLUDE的区别?** - **动态INCLUDE**:在运行时动态决定是否包含另一个页面,可以传递参数。 - **静态INCLUDE**:在编译时就已经确定,不支持...

    struts.1.2.9

    Struts提供了丰富的自定义JSP标签,如`&lt;html:form&gt;`、`&lt;logic:iterate&gt;`等,简化了视图层的编写,使得开发者可以专注于业务逻辑,而不是底层的HTML代码。 **6. 国际化与本地化** Struts支持多语言,通过资源文件(`...

    struts1(老师穿的课件哈)

    在这个"struts1(老师穿的课件哈)"压缩包中,我们很可能会找到与Struts1相关的源代码示例,以及关于分页和数据插入、增删操作的实例。 分页是Web应用中常见的一种功能,尤其是在处理大量数据时,为了提高用户体验,...

    BookSSH-ldg.zip

    同时,利用Struts的标签库(例如logic:iterate、bean:write等),可以在JSP页面中轻松地遍历和显示数据。 总结来说,"BookSSH-ldg.zip"提供的资料展示了Struts框架在实现图书管理系统中的应用,通过MVC模式将业务...

Global site tag (gtag.js) - Google Analytics