`
珊瑚成长日记
  • 浏览: 21035 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

ibatis iterate用法和ibatis 一对多查询

 
阅读更多

今天在用

<select id="aaa" parameterClass="java.util.List" resultMap="siteMap">

select * from table where a in

<iterate  open="(" close=")" conjunction=",">  
      #idList[]#
  </iterate>  

时一直报错,找了很长时间,看到一篇文章才知道原来参数是list 在iterate里面不能加property,去掉property就正常了。

////////////////////////////////////////////////////////////////////////

写道
<iterate property="" conjunction="" open="" close="" prepend="">
</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属性区分要遍历的 集合。

 

/////ibtais一对多查询用法,和一对多插入方法

写道
<resultMap id="voteMap" class="Vote">
<result property="voteId" column="vote_id" />
<result property="siteId" column="site_id" />
</resultMap>

<resultMap id="picVoteMap" class="PicVote" extends="voteMap" >
<result property="picOptions" column="vote_id" select="getVotePicOptionByVoteId" />
</resultMap>

<select id="getVotePicOptionByVoteId" parameterClass="int" resultMap="votePicOptionMap" >
select *
from OBS.FACE_EXT_VOTE_PIC_OPTION where vote_id = #value#
</select>

<select id="getPicVoteById" parameterClass="int" resultMap="picVoteMap" >
select *
from OBS.FACE_EXT_VOTE where vote_id = #value#
</select>

 用这种查询方式即可只调用getPicVoteById,就能将一对多对象进行查询操作。

一对多插入:

先插入主表,然后获取主表id,然后批量插入副表即可完成一对多的插入。

写道
<selectKey keyProperty="voteId" resultClass="int">
VALUES IDENTITY_VAL_LOCAL()
</selectKey>

 插入主表末尾插入这么一段就可返回插入主键。

分享到:
评论

相关推荐

    ibatis中iterate的例子

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

    ibatis标签

    至于压缩包中的DE_iBATIS-SqlMaps-2_cn.pdf文件,这可能是一份关于iBATIS SqlMaps的中文文档,可能包含了对`&lt;iterate&gt;`标签的详细解释,包括其语法、使用场景、示例以及注意事项等内容。这份文档对于学习和理解...

    Ibatis查询Id列表.doc

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

    ibatis list

    我们将通过解析提供的文件片段来阐述这一知识点,重点放在如何使用`&lt;iterate&gt;`标签以及在不同场景下的应用技巧。 ### iBatis批量操作:`&lt;iterate&gt;`标签的使用 `&lt;iterate&gt;`标签是iBatis中用于循环遍历集合的一种...

    Ibatis复杂查询语句.doc

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

    ibatis批量处理

    iBatis提供了批处理功能,可以在一次数据库连接中执行多个SQL语句,这极大地提高了处理大量数据时的性能。iBatis通过`SqlMapClient`接口提供了几个关键方法来实现批处理: 1. **`startBatch()`**:开始批处理。 2. ...

    Ibatis常用sql语句

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

    常用ibatis配置

    标题中提到的“常用ibatis配置”指的是在使用iBatis这一数据持久层框架中,常见的配置用法和技术点。iBatis(现称为MyBatis)是一个流行的Java持久层框架,它通过使用XML或注解的方式,将SQL语句与对象进行映射,...

    ibatis批处理

    在这种情况下,如果某些参数只有一份,而其他参数有多份,可以通过创建一个新的JavaBean类,将所有参数作为属性,然后在配置文件中使用`&lt;iterate&gt;`标签对多份参数进行循环。例如,如果要更新的字段`Opr`只有一个,但...

    ibatis批量存储

    使用Ibatis的批处理,首先需要开启SqlSession的自动提交,然后调用SqlSession的batch()方法进入批处理模式,接着执行多次insert、update或delete操作,最后调用commit()方法提交事务。这种方式避免了频繁的数据库...

    ibatis常用sql语句

    对于更复杂的情况,如需要插入一个包含多个属性的对象到数据库,iBATIS提供了`&lt;insert&gt;`标签来实现。在该标签内部,可以通过`#propertyName#`的形式引用Java对象的属性,其中`propertyName`对应Java对象的属性名。...

    iBATIS动态标签

    iBATIS动态标签是SQL映射文件中的一种功能强大的特性,它允许在SQL语句中进行条件判断,根据传入的参数动态生成合适的查询条件。动态标签主要用于提高灵活性,使得SQL映射文件能够适应多种查询场景,而无需为每种...

    iBATIS实战

    书的最后给出了一个设计优雅、层次清晰的示例程序JGameStore,该示例涵盖全书的大部分知识点,可以作为iBATIS学习和Web开发的经典案例,非常值得深入研究。 本书既可为广大的开发人员(不仅仅是Web应用程序开发人员)...

    ibatis16个常用sql语句

    iBatis 16个常用SQL语句 iBatis是一个基于Java的持久层框架,提供了一个简洁的方式来访问和操作数据库。在iBatis中,SQL语句是...iBatis提供了一个灵活的方式来配置SQL语句,支持各种类型的输入参数和复杂的查询语句。

    Ibatis资料ibatai sql map iBATIS使用$和#的一些理解

    在Java代码中,我们创建一个HashMap,并将参数放入其中,然后调用`queryForList`方法执行查询: ```java Map, String&gt; map = new HashMap(); map.put("name", "gaoxiang"); List&lt;User&gt; list = sqlMap.queryForList...

    iBatis的动态SQL语句

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

    ibatis资料

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

    ibatis批量删除的方法.docx

    第二种方法是利用iBatis提供的`iterate`标签,它可以遍历整个集合并为列表中的每个元素生成SQL的一部分。iBatis官方文档中给出了一个示例: ```xml DELETE FROM info &lt;iterate prepend="AND" property=...

    ibatis dynamic 用法

    本文将详细介绍 ibatis 中 Dynamic SQL 的使用方法,特别关注 `&lt;dynamic&gt;` 标签及其相关的子标签。 #### 二、Dynamic SQL 标签概述 Dynamic SQL 在 ibatis 中主要通过以下几种标签实现: 1. **`&lt;dynamic&gt;`**:用于...

Global site tag (gtag.js) - Google Analytics