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>标签”指的是在iBATIS框架中用于动态SQL的一个关键功能。iBATIS是一个优秀的持久层框架,它允许将SQL语句直接嵌入到Java代码中,简化了数据库操作。而`<iterate>`标签是iBATIS提供的一个...
`<iterate>`标签是iBatis中用于循环遍历集合的一种机制,它允许你在SQL语句中动态生成参数列表,这对于批量操作(如批量插入、更新或删除)尤为重要。该标签支持多种属性,包括`property`、`conjunction`、`open`、`...
4. **`<iterate>`**:用于循环迭代一个集合中的元素。 #### 三、`<dynamic>` 标签详解 `<dynamic>` 标签是最常用的动态 SQL 标签之一,它可以包含其他子标签,并支持 `prepend`, `open`, `close` 属性。 - **`...
标题和描述均聚焦于ibatis 3.0 Dynamic Sql的设计解析以及它与2.x版本的差异,这是一个关于ORM(对象关系映射)框架ibatis在处理动态SQL方面的重要升级和改进的主题。以下是对该主题的深入探讨: ### 重要概念:...
iBatis可以非常简单地配置和映射原生信息,将接口和Java的POJOs(Plain Old Java Objects,普通的Java对象)映射成数据库中的记录。 在iBatis中实现批量操作通常涉及到以下几个关键步骤: 1. **配置文件**:定义SQL...
在实际应用中,通常会将iBatis与Spring框架结合使用,利用Spring提供的事务管理能力。在这种情况下,可以通过Spring的AOP(面向切面编程)特性自动处理事务的开启、提交和回滚等操作。 示例代码如下: ```java ...
- **ibatis**: 是一个开源的数据访问层框架,主要用于Java应用程序与数据库之间的交互。 - **动态代理DTD**: Document Type Definition(文档类型定义)是一种用于定义XML文档结构的规范。这里的“动态代理DTD”特指...
根据给定的文件信息,以下是对“Ibatis常用SQL语句”的详细解析,涵盖了一系列Ibatis在数据操作中的应用实例。 ### Ibatis简介 Ibatis是一个支持普通SQL查询、存储过程以及高级映射的优秀持久层框架。Ibatis可以让...
根据提供的文档信息,我们可以深入探讨Ibatis框架中的一个具体应用场景:如何通过动态SQL查询特定条件下的ID列表。本文将从以下几个方面进行详细解析: ### 一、Ibatis简介 Ibatis是一个基于Java的持久层框架,它...
iterate标签的基本语法是`<iterate property="collectionName" open="(" close=")" conjunction=","/>`,其中`property`指定了集合属性的名称,`open`和`close`定义了循环开始和结束的符号,`conjunction`则是元素...
在"Ibatis动态查询例子(#和$以及iterate等的用法) - Java - JavaEye论坛.mht"这个文件中,可能包含了JavaEye社区成员关于Ibatis动态查询的深入讨论和示例。这些讨论可能涵盖了实际开发中的问题和解决方案,比如如何...
总结起来,"struts+spring+ibatis(SSI)的最简分页及标签"是一个关于如何在Java Web开发中结合Struts的MVC架构、Spring的依赖管理和iBatis的数据访问来实现分页功能以及创建自定义标签的实践。这个过程涉及到Struts的...
书中既详实地介绍了iBATIS的设计理念和基础知识,也讨论了动态SQL、高速缓存、DAD框架等高级主题,还讲解了iBATIS在实际开发中的应用。书的最后给出了一个设计优雅、层次清晰的示例程序JGameStore,该示例涵盖全书的...
3. 对于`IN`关键字,使用迭代器 `<iterate>` 避免直接拼接。 **XSS攻击** XSS是指攻击者在网页中插入恶意脚本,当用户访问含有恶意脚本的页面时,脚本被执行,从而达到攻击目的。常见的实例包括评论、贴图和AJAX回...
- `<logic:iterate>`:循环遍历集合。 **13. JSP中动态INCLUDE与静态INCLUDE的区别?** - **动态INCLUDE**:在运行时动态决定是否包含另一个页面,可以传递参数。 - **静态INCLUDE**:在编译时就已经确定,不支持...
Struts提供了丰富的自定义JSP标签,如`<html:form>`、`<logic:iterate>`等,简化了视图层的编写,使得开发者可以专注于业务逻辑,而不是底层的HTML代码。 **6. 国际化与本地化** Struts支持多语言,通过资源文件(`...
在这个"struts1(老师穿的课件哈)"压缩包中,我们很可能会找到与Struts1相关的源代码示例,以及关于分页和数据插入、增删操作的实例。 分页是Web应用中常见的一种功能,尤其是在处理大量数据时,为了提高用户体验,...
同时,利用Struts的标签库(例如logic:iterate、bean:write等),可以在JSP页面中轻松地遍历和显示数据。 总结来说,"BookSSH-ldg.zip"提供的资料展示了Struts框架在实现图书管理系统中的应用,通过MVC模式将业务...