<iterate
property="" /*可选,
从传入的参数集合中使用属性名去获取值, 这个必须是一个List类型,
否则会出现OutofRangeException,
通常是参数使用java.util.Map时才使用,
如果传入的参数本身是一个java.util.List, 不能只用这个属性.
不知道为啥官网: http://ibatis.apache.org/docs/dotnet/datamapper/ch03s09.html#id386679
说这个属性是必须的, 但是测试的时候是可以不设置这个属性的, 还望那位大虾知道, 讲解一下. */
conjunction="" /*可选,
iterate可以看作是一个循环,
这个属性指定每一次循环结束后添加的符号,
比如使每次循环是OR的, 则设置这个属性为OR*/
open="" /*可选, 循环的开始符号*/
close="" /*可选, 循环的结束符号*/
prepend="" /*可选, 加在open指定的符号之前的符号*/
>
</iterate>
实现一:
<!-- 批量删除对象的时候,iterate不要property属性 -->
<delete id="delStudybook" parameterClass="java.util.List">
delete FROM STUDYBOOK WHERE ID IN
<iterate conjunction="," open="(" close=")">
#bookList[]#
</iterate>
</delete>
注意要property的错误
Caused by: com.ibatis.common.beans.ProbeException: Error getting ordinal list from JavaBean. Cause java.lang.StringIndexOutOfBoundsException: String index out of range: -1
//另外:如果parameterClass="java.util.List"类型不匹配的话
报错Caused by: java.sql.SQLException: Invalid parameter object type. Expected 'java.util.Map' but found 'java.util.ArrayList'.
实现二:
<!--批量修改对象,iterate必须包括property属性-->
<update id="updateUsersIterate" parameterClass="java.util.Map">
update users set user_name=#userInfo.user_name# where user_id in
<iterate property="list" conjunction="," open="(" close=")">
#list[]#
</iterate>
</update>
注意不要property属性的错误
Cause: com.ibatis.sqlmap.client.SqlMapException: ParameterObject or property was not a Collection, Array or Iterator.
实现三:
<!-- Iterate的使用,根据多个匹配条件查询,类似in(a,b,c)-->
<select id="selectByIterate" parameterClass="java.util.List" resultClass="user">
SELECT * FROM USERS WHERE USER_ID IN
<iterate conjunction="," open="(" close=")">
#ids[]#
</iterate>
</select>
注意:不要property属性,否则报错。String index out of range: -1
2. 但是,若参数有多个传入的一个是List,另一个不是, parameterClass为map时,需要property属性区分要遍历的 集合。
<select id="sql_test" parameterclass="myPramBean" resultclass="myResult">
select *from tablewhere name in
<iterate property="ids" conjunction="," close=")" open="(" />
#ids[]#
</iterate>
and code=#code#
</select>
myPramBean
{
private String code;
private List ids;
...
}
实现四:
<!--批量增加对象-->
<insert id="BarkInsertUsers" parameterClass="java.util.List">
insert all
<iterate conjunction="">
into users(user_id,user_name,password,address,telephone,email,create_date)
values(#list[].user_id#,#list[].user_name#,#list[].password#,
#list[].address#,#list[].telephone#,#list[].email#,#list[].create_date#)
</iterate>
<!--必须要加上 -->
select * from dual
</insert>
注意:本打算使主键实现自动增长,但是使用了hibernate_sequence.NEXTVAL,报错
违反唯一约束条件 (SCOTT.SYS_C0010057),请高手指点下。
相关推荐
**iBatis迭代的用法** 在处理查询结果时,iBatis提供了迭代的用法,可以方便地遍历查询结果集。以下是一个基本示例: ```java List<User> users = sqlSession.selectList("com.example.mapper.getUserList"); for ...
总结起来,这个Ibatis查询语句充分展示了Ibatis处理复杂查询的能力,包括动态SQL、子查询、多表联接、条件判断、数据类型映射和迭代处理等功能。在实际开发中,这种灵活性使得Ibatis能够适应各种复杂的业务场景,...
动态查询语句配置是Ibatis的一个重要特性,它允许我们在运行时根据业务需求构建灵活多变的SQL语句。这篇博文主要探讨的是如何在Ibatis中设置和使用动态SQL,以便实现更高效、更灵活的数据查询。 首先,我们需要理解...
在本话题中,我们将探讨如何在使用iBatis框架与Oracle数据库时实现树形查询。 首先,iBatis是一个优秀的持久层框架,它允许开发者将SQL语句直接写在XML配置文件或者注解中,提供了比传统JDBC更高级的抽象层,使得...
举个例子,假设我们有一个用户ID的列表,我们需要查询这些ID对应的所有用户信息,可以这样配置iBatis的映射文件: ```xml SELECT * FROM users WHERE id IN (" property="ids" open="," close=")"> #{ids[index...
Ibatis是一个支持普通SQL查询、存储过程以及高级映射的优秀持久层框架。Ibatis可以让你直接编写原生态SQL,可以严格控制SQL执行性能,灵活度极高,尤其适合对SQL有特殊需求的项目。 ### SQL语句详解 #### 1. 删除...
随着技术的发展,iBATIS经历了多个版本的迭代,包括iBATIS v1、v2以及最新的iBATIS v3。本文将详细对比这三个版本在配置文件`sqlMapConfig.xml`、映射文件`sqlMap`以及API方面的差异。 #### sqlMapConfig.xml 中的...
随着时间的推移,软件会不断迭代优化,因此出现了不同版本的ibatis-common.jar包。这两个版本的主要差异在于功能的增强和bug的修复。ibatis-common-2.jar相较于1.3.1版本,可能会包含更多的特性以及性能上的提升。 ...
**Ibatis动态查询详解** Ibatis,全称MyBatis,是一个优秀的持久层框架,它支持定制化SQL、存储过程以及高级映射。Ibatis避免了几乎所有的JDBC代码和手动设置参数以及获取结果集。Ibatis可以使用简单的XML或注解...
此外,Ibatis的动态SQL功能使你能根据不同的条件灵活构建查询,这在处理大数据量时尤其有用。 接下来,我们来讨论Oracle数据库。Oracle是世界上最广泛使用的商业关系型数据库管理系统之一,尤其在企业级应用中。它...
在IT领域的数据库操作中,iBatis框架提供了一种强大的数据映射机制,使得开发者能够更灵活地控制SQL语句的生成与执行。在本文中,我们将深入探讨iBatis框架中的“ibatis批量”功能,特别是如何利用iBatis进行批量...
随着技术的不断发展和轻量级框架如Ruby on Rails的兴起,iBATIS也在不断地进行着迭代更新。 #### 三、iBATIS框架的特点与优势 **3.1 易用性** - **配置灵活**:iBATIS框架允许开发者自由编写SQL语句,提供XML配置...
### iBatis中的动态SQL语句详解 ...同时,动态SQL的使用也使得iBatis成为处理复杂数据查询的理想选择之一。希望本文能帮助开发者更好地理解和掌握iBatis框架中的动态SQL技术,从而提升开发效率和项目质量。
iBatis 是一个轻量级的 Java ORM(对象关系映射)框架,它允许开发者将 SQL 查询直接写在 XML 配置文件中,方便地将数据库操作与业务逻辑分离。 在描述中提到的博客链接可能提供了更多关于 iBatis 关系映射的具体...
***可以被视为.NET版的iBATIS框架,后者是一个流行的Java持久层框架。***通过一种简单的映射机制,可以将数据访问对象(DAO)映射到SQL语句上,便于管理和维护。 文档中提到的“Data Access Objects Developer ...
例如,可以通过 `<if>`、`<choose>`、`<when>`、`<otherwise>`(二元标签)、`<where>`、`<set>`(一元标签)和 `<foreach>`(迭代标签)等构建复杂的 SQL 语句。这些标签支持 `prepend`、`open` 和 `close` 等属性...
本教程将讲解如何在iBatis中实现分页查询,特别是结合Struts2和Freemarker进行集成。 1. **iBatis分页基础** iBatis 提供了对分页查询的支持,可以通过设置SQL语句中的LIMIT和OFFSET子句来实现。LIMIT用于指定每页...
4. **结果映射(Result Maps)**:Ibatis提供了结果映射机制,可以将查询结果自动映射到Java对象。在XML映射文件中定义ResultMap元素,指定列名与Java字段的对应关系,以及处理复杂关联关系的方法。 5. **参数映射...
iBatis虽简化了数据绑定代码,但仍需手动编写SQL查询,这为开发者提供了更直接的数据库操作方式,便于针对特定场景进行性能优化。然而,这也意味着更多的工作量,特别是在数据库结构频繁变动的场景下,需要更多地...
而iBatis3则是一个轻量级的Java持久层框架,它允许开发者将SQL查询与Java代码分离,提供了灵活的数据访问接口。 在整合Flex3和iBatis3的过程中,主要目的是实现在Flex前端与后端iBatis服务之间的数据交互。这一整合...