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的实现中,`<iterate>`标签的解析和执行是通过SqlMapConfig.xml配置文件加载后,由SqlMapClientBuilder解析,并由Executor执行器来处理。在处理动态SQL时,iBATIS会将`<iterate>`标签转换成对应的...
在IT领域的数据库操作中,iBatis框架提供了一种强大的数据映射机制,使得开发者能够更灵活地控制SQL语句的生成与执行。在本文中,我们将深入探讨iBatis框架中的“ibatis批量”功能,特别是如何利用iBatis进行批量...
在实际应用中,通常会将iBatis与Spring框架结合使用,利用Spring提供的事务管理能力。在这种情况下,可以通过Spring的AOP(面向切面编程)特性自动处理事务的开启、提交和回滚等操作。 示例代码如下: ```java ...
在实际应用中,iterate可以帮助我们构建出符合需求的动态SQL,极大地提高了代码的可读性和维护性。 2. 批处理: 批处理是提高数据库操作效率的一种重要手段,Ibatis也支持批处理功能。在批量存储场景下,批处理可以...
根据提供的文档信息,我们可以深入探讨Ibatis框架中的一个具体应用场景:如何通过动态SQL查询特定条件下的ID列表。本文将从以下几个方面进行详细解析: ### 一、Ibatis简介 Ibatis是一个基于Java的持久层框架,它...
根据给定的文件信息,以下是对“Ibatis常用SQL语句”的详细解析,涵盖了一系列Ibatis在数据操作中的应用实例。 ### Ibatis简介 Ibatis是一个支持普通SQL查询、存储过程以及高级映射的优秀持久层框架。Ibatis可以让...
在"Ibatis动态查询例子(#和$以及iterate等的用法) - Java - JavaEye论坛.mht"这个文件中,可能包含了JavaEye社区成员关于Ibatis动态查询的深入讨论和示例。这些讨论可能涵盖了实际开发中的问题和解决方案,比如如何...
iBatis可以非常简单地配置和映射原生信息,将接口和Java的POJOs(Plain Old Java Objects,普通的Java对象)映射成数据库中的记录。 在iBatis中实现批量操作通常涉及到以下几个关键步骤: 1. **配置文件**:定义SQL...
标题和描述均聚焦于ibatis 3.0 Dynamic Sql的设计解析以及它与2.x版本的差异,这是一个关于ORM(对象关系映射)框架ibatis在处理动态SQL方面的重要升级和改进的主题。以下是对该主题的深入探讨: ### 重要概念:...
书中既详实地介绍了iBATIS的设计理念和基础知识,也讨论了动态SQL、高速缓存、DAD框架等高级主题,还讲解了iBATIS在实际开发中的应用。书的最后给出了一个设计优雅、层次清晰的示例程序JGameStore,该示例涵盖全书的...
- **ibatis**: 是一个开源的数据访问层框架,主要用于Java应用程序与数据库之间的交互。 - **动态代理DTD**: Document Type Definition(文档类型定义)是一种用于定义XML文档结构的规范。这里的“动态代理DTD”特指...
ibatis 是一款非常流行的持久层框架,它简化了 Java 应用程序与数据库之间的交互。Dynamic SQL 功能是 ibatis 中的一项重要特性,允许开发者根据运行时的条件动态构建 SQL 语句。本文将详细介绍 ibatis 中 Dynamic ...
总结起来,"struts+spring+ibatis(SSI)的最简分页及标签"是一个关于如何在Java Web开发中结合Struts的MVC架构、Spring的依赖管理和iBatis的数据访问来实现分页功能以及创建自定义标签的实践。这个过程涉及到Struts的...
【网络安全】Web安全是程序员在开发过程中不可忽视的重要领域,主要关注的是防止应用程序遭受各种攻击。此PPT详细讲解了两个常见的Web安全漏洞:SQL注入和XSS(跨站脚本攻击)。 **SQL注入** SQL注入是由于对用户...
spring中的BeanFactory与ApplicationContext的作用和区别?** - **BeanFactory**:基本的容器接口,提供了Bean的实例化、配置和管理功能。 - **ApplicationContext**:继承了BeanFactory的功能,并提供了更多的...
在这个"struts1(老师穿的课件哈)"压缩包中,我们很可能会找到与Struts1相关的源代码示例,以及关于分页和数据插入、增删操作的实例。 分页是Web应用中常见的一种功能,尤其是在处理大量数据时,为了提高用户体验,...
同时,利用Struts的标签库(例如logic:iterate、bean:write等),可以在JSP页面中轻松地遍历和显示数据。 总结来说,"BookSSH-ldg.zip"提供的资料展示了Struts框架在实现图书管理系统中的应用,通过MVC模式将业务...
Struts可以方便地与Hibernate、iBatis等持久层框架,以及Spring、EJB等企业级服务框架集成,构建复杂的企业级应用。 **9. 维护与安全** 尽管Struts 1.x已经不再维护,但在很多遗留项目中仍然广泛使用。开发者需要...