`
qieyi28
  • 浏览: 158337 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

ibatis 迭代查询

 
阅读更多

<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迭代的用法

    **iBatis迭代的用法** 在处理查询结果时,iBatis提供了迭代的用法,可以方便地遍历查询结果集。以下是一个基本示例: ```java List&lt;User&gt; users = sqlSession.selectList("com.example.mapper.getUserList"); for ...

    Ibatis复杂查询语句.doc

    总结起来,这个Ibatis查询语句充分展示了Ibatis处理复杂查询的能力,包括动态SQL、子查询、多表联接、条件判断、数据类型映射和迭代处理等功能。在实际开发中,这种灵活性使得Ibatis能够适应各种复杂的业务场景,...

    动态ibatis查询语句配置

    动态查询语句配置是Ibatis的一个重要特性,它允许我们在运行时根据业务需求构建灵活多变的SQL语句。这篇博文主要探讨的是如何在Ibatis中设置和使用动态SQL,以便实现更高效、更灵活的数据查询。 首先,我们需要理解...

    ibatis下oracle树查询

    在本话题中,我们将探讨如何在使用iBatis框架与Oracle数据库时实现树形查询。 首先,iBatis是一个优秀的持久层框架,它允许开发者将SQL语句直接写在XML配置文件或者注解中,提供了比传统JDBC更高级的抽象层,使得...

    ibatis中iterate的例子

    举个例子,假设我们有一个用户ID的列表,我们需要查询这些ID对应的所有用户信息,可以这样配置iBatis的映射文件: ```xml SELECT * FROM users WHERE id IN (" property="ids" open="," close=")"&gt; #{ids[index...

    Ibatis常用sql语句

    Ibatis是一个支持普通SQL查询、存储过程以及高级映射的优秀持久层框架。Ibatis可以让你直接编写原生态SQL,可以严格控制SQL执行性能,灵活度极高,尤其适合对SQL有特殊需求的项目。 ### SQL语句详解 #### 1. 删除...

    iBATIS 三个版对比

    随着技术的发展,iBATIS经历了多个版本的迭代,包括iBATIS v1、v2以及最新的iBATIS v3。本文将详细对比这三个版本在配置文件`sqlMapConfig.xml`、映射文件`sqlMap`以及API方面的差异。 #### sqlMapConfig.xml 中的...

    ibatis-common.jar包

    随着时间的推移,软件会不断迭代优化,因此出现了不同版本的ibatis-common.jar包。这两个版本的主要差异在于功能的增强和bug的修复。ibatis-common-2.jar相较于1.3.1版本,可能会包含更多的特性以及性能上的提升。 ...

    ibatis资料

    **Ibatis动态查询详解** Ibatis,全称MyBatis,是一个优秀的持久层框架,它支持定制化SQL、存储过程以及高级映射。Ibatis避免了几乎所有的JDBC代码和手动设置参数以及获取结果集。Ibatis可以使用简单的XML或注解...

    ibatis学习总结,oracle , 敏捷开发,

    此外,Ibatis的动态SQL功能使你能根据不同的条件灵活构建查询,这在处理大数据量时尤其有用。 接下来,我们来讨论Oracle数据库。Oracle是世界上最广泛使用的商业关系型数据库管理系统之一,尤其在企业级应用中。它...

    ibatis list

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

    ibatis框架理论学习

    随着技术的不断发展和轻量级框架如Ruby on Rails的兴起,iBATIS也在不断地进行着迭代更新。 #### 三、iBATIS框架的特点与优势 **3.1 易用性** - **配置灵活**:iBATIS框架允许开发者自由编写SQL语句,提供XML配置...

    iBatis的动态SQL语句

    ### iBatis中的动态SQL语句详解 ...同时,动态SQL的使用也使得iBatis成为处理复杂数据查询的理想选择之一。希望本文能帮助开发者更好地理解和掌握iBatis框架中的动态SQL技术,从而提升开发效率和项目质量。

    ibatis 的关系映射

    iBatis 是一个轻量级的 Java ORM(对象关系映射)框架,它允许开发者将 SQL 查询直接写在 XML 配置文件中,方便地将数据库操作与业务逻辑分离。 在描述中提到的博客链接可能提供了更多关于 iBatis 关系映射的具体...

    IBATIS.NET 学习文档

    ***可以被视为.NET版的iBATIS框架,后者是一个流行的Java持久层框架。***通过一种简单的映射机制,可以将数据访问对象(DAO)映射到SQL语句上,便于管理和维护。 文档中提到的“Data Access Objects Developer ...

    ibatis+jndi+mysql

    例如,可以通过 `&lt;if&gt;`、`&lt;choose&gt;`、`&lt;when&gt;`、`&lt;otherwise&gt;`(二元标签)、`&lt;where&gt;`、`&lt;set&gt;`(一元标签)和 `&lt;foreach&gt;`(迭代标签)等构建复杂的 SQL 语句。这些标签支持 `prepend`、`open` 和 `close` 等属性...

    ibatis教程

    本教程将讲解如何在iBatis中实现分页查询,特别是结合Struts2和Freemarker进行集成。 1. **iBatis分页基础** iBatis 提供了对分页查询的支持,可以通过设置SQL语句中的LIMIT和OFFSET子句来实现。LIMIT用于指定每页...

    ibatis-2.3.0.677.jar.zip

    4. **结果映射(Result Maps)**:Ibatis提供了结果映射机制,可以将查询结果自动映射到Java对象。在XML映射文件中定义ResultMap元素,指定列名与Java字段的对应关系,以及处理复杂关联关系的方法。 5. **参数映射...

    hibernateVSibatis

    iBatis虽简化了数据绑定代码,但仍需手动编写SQL查询,这为开发者提供了更直接的数据库操作方式,便于针对特定场景进行性能优化。然而,这也意味着更多的工作量,特别是在数据库结构频繁变动的场景下,需要更多地...

    flex3和ibatis3的整合

    而iBatis3则是一个轻量级的Java持久层框架,它允许开发者将SQL查询与Java代码分离,提供了灵活的数据访问接口。 在整合Flex3和iBatis3的过程中,主要目的是实现在Flex前端与后端iBatis服务之间的数据交互。这一整合...

Global site tag (gtag.js) - Google Analytics