`
Copperfield
  • 浏览: 260324 次
  • 性别: Icon_minigender_1
  • 来自: 上海
博客专栏
C407adc3-512e-3a03-a056-ce4607c3a3c0
java并发编程陷阱
浏览量:25137
社区版块
存档分类

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;`标签的解析和执行是通过SqlMapConfig.xml配置文件加载后,由SqlMapClientBuilder解析,并由Executor执行器来处理。在处理动态SQL时,iBATIS会将`&lt;iterate&gt;`标签转换成对应的...

    ibatis list

    在IT领域的数据库操作中,iBatis框架提供了一种强大的数据映射机制,使得开发者能够更灵活地控制SQL语句的生成与执行。在本文中,我们将深入探讨iBatis框架中的“ibatis批量”功能,特别是如何利用iBatis进行批量...

    ibatis批量处理

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

    ibatis批量存储

    在实际应用中,iterate可以帮助我们构建出符合需求的动态SQL,极大地提高了代码的可读性和维护性。 2. 批处理: 批处理是提高数据库操作效率的一种重要手段,Ibatis也支持批处理功能。在批量存储场景下,批处理可以...

    Ibatis查询Id列表.doc

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

    Ibatis常用sql语句

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

    ibatis资料

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

    iBatis操作

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

    iBATIS实战

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

    ibatis 动态代理dtd

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

    ibatis dynamic 用法

    ibatis 是一款非常流行的持久层框架,它简化了 Java 应用程序与数据库之间的交互。Dynamic SQL 功能是 ibatis 中的一项重要特性,允许开发者根据运行时的条件动态构建 SQL 语句。本文将详细介绍 ibatis 中 Dynamic ...

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

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

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

    【网络安全】Web安全是程序员在开发过程中不可忽视的重要领域,主要关注的是防止应用程序遭受各种攻击。此PPT详细讲解了两个常见的Web安全漏洞:SQL注入和XSS(跨站脚本攻击)。 **SQL注入** SQL注入是由于对用户...

    Java框架面试题总结

    spring中的BeanFactory与ApplicationContext的作用和区别?** - **BeanFactory**:基本的容器接口,提供了Bean的实例化、配置和管理功能。 - **ApplicationContext**:继承了BeanFactory的功能,并提供了更多的...

    struts1(老师穿的课件哈)

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

    BookSSH-ldg.zip

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

    struts.1.2.9

    Struts可以方便地与Hibernate、iBatis等持久层框架,以及Spring、EJB等企业级服务框架集成,构建复杂的企业级应用。 **9. 维护与安全** 尽管Struts 1.x已经不再维护,但在很多遗留项目中仍然广泛使用。开发者需要...

Global site tag (gtag.js) - Google Analytics