`
patternhe
  • 浏览: 42847 次
  • 性别: Icon_minigender_1
  • 来自: 成都
文章分类
社区版块
存档分类
最新评论

ibatis批量插入数据-iterate标签详解及应用

阅读更多

我们都知道mysql支持:

 

insert into 
	tb_name(col1, col2, col3) 
	values 
	(col1_v, col2_v, col3_v), 
	(col1_v, col2_v, col3_v),
	 ...

 这样批量插入多条数据, 使用场景是, 当初始化某用户的数据库信息时.

比如现在, 我们有一个产品激活才能使用,并且激活才能使用的需求, 同时

当一个用户激活自己的帐户的同时(或者一段时间之后), 可以获得若干个激活码

提供给自己的其他朋友激活. 我们把激活看做一个实体, 使用一张单独的表结构存储.

现在如果我们想使用ibatis来实现这个需求怎么办呢?

使用过ibatis 的人都会想到iterate. 没错我们现在就是要用ibatis的iterate来实现.

iterate标签有几个属性:

 

<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>

 我们设置来做个实验:

 

<select id="test_iterate" parameterClass="java.util.List">
	<![CDATA[
		selelct * from tb_name where id=123
	]]>
	<iterate prepend="prepend" conjunction="conn" open="open" colse="close">
		/*使用java.util.List作为参数不能设置property属性*/
		<![CDATA[
			#v[]#
		]]>/*这里的"[]"是必须的, 要不然ibatis会把v直接解析为一个String*/
	</iterate>
</select>

 如果传入一个List为[1111,2222,3333], 上面将得到一个sql语句:

 

select * from tb_name where id=123 prepend open 1111 conn 2222 conn 3333 close

 对于上面的应用场景, 我们可以:

 

<insert id="betchAddNewActiveCode" parameterClass="java.util.List">
	<![CDATA[
		insert into tb_active_code(code, create_user_id, create_time) values
	]]>
	<iterate conjunction=",">
		<![CDATA[
			(#codes[].code#, #codes[].createUserId#, #codes[].createTime#)
		]]>
	</iterate>
</insert>

 产生sql语句:

 

insert into tb_active_code(code, create_uin, create_time) values (?, ?, ?) , (?, ?, ?) , (?, ?, ?)

 但是如果:

 

<insert id="betchAddNewActiveCode" parameterClass="java.util.List">
	<![CDATA[
		insert into tb_active_code(code, create_user_id, create_time) values
	]]>
	<iterate conjunction="," open="(" close=")">
		<![CDATA[
			/*这里不加"("和")"*/
			#codes[].code#, #codes[].createUserId#, #codes[].createTime#
		]]>
	</iterate>
</insert>

 那么产生的sql语句为:

 

insert into tb_active_code(code, create_uin, create_time) values ( ?, ?, ?   ,   ?, ?, ?   ,   ?, ?, ?)

 可以看到区别还是很大的.所以conjunction, open 和close这几个属性需要特别的区分开来.

 

 

可能有些地方理解的不是很好, 如果有错误, 还请不吝赐教.

 

参考连接: http://ibatis.apache.org/docs/dotnet/datamapper/ch03s09.html#id386679

4
9
分享到:
评论

相关推荐

    iBATIS-SqlMaps-2-Tutorial_cn.pdf

    iBATIS-SqlMaps-2-Tutorial_cniBATIS-SqlMaps-2-Tutorial_cn.pdf.pdfiBATIS-SqlMaps-2-Tutorial_cn.pdfiBATIS-SqlMaps-2-Tutorial_cn.pdf

    ibatis3批量插入

    通过Ibatis3xml文件配置+Mysql实现数据批量插入,原先在网上找很多,都是关于批量更新,批量插入的很少,而且其写法又完全不同,所以自己研究了一下。可供参考。另外插入时如出现内容报错,请参照my.cnf修改书库配置...

    ibatis标签

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

    ibatis-sqlmaps-2_cn

    在`ibatis-sqlmaps-2_cn.pdf`中,你将看到如何定义SQL语句,包括简单查询、插入、更新和删除操作,以及如何处理结果集映射。此外,教程还会涵盖动态SQL,这是IBATIS的一大亮点,允许在运行时构建和修改SQL语句,提高...

    ibatis中iterate的例子

    在iBatis中,`&lt;iterate&gt;`标签是一个非常实用的功能,它允许我们处理集合数据,如数组、List或Map等,进行循环遍历并生成动态SQL语句。下面我们将详细探讨`&lt;iterate&gt;`标签的用法及其示例。 `&lt;iterate&gt;`标签的主要...

    iBATIS-SqlMaps-2-快速入门教程.docx

    iBATIS-SqlMaps-2 是一个 Java 持久层框架,用于简化 Java 应用程序中的数据库交互。快速入门教程旨在帮助开发者快速了解 iBATIS-SqlMaps-2 的使用和配置。 知识点1:iBATIS-SqlMaps-2 简介 iBATIS-SqlMaps-2 是一...

    iBATIS-SqlMaps-2-Tutorial_cn

    《iBATIS-SqlMaps-2-Tutorial_cn》是一本针对初学者的优秀教程,它深入浅出地介绍了iBATIS这一流行的数据访问框架。iBATIS,作为Java世界中的一个轻量级持久层框架,它提供了一种将SQL查询与Java代码解耦合的方法,...

    iBATIS-SqlMaps-2_cn中文文档

    iBATIS-SqlMaps-2_cn中文文档

    Ibatis基本配置---[环境搭建

    Ibatis基本配置---[环境搭建

    iBATIS-SqlMaps-2 PDF文档资料(日文)

    教程《iBATIS-SqlMaps-2 Tutorial_ja.pdf》可能包含以下内容:基础安装和配置、SqlMap配置详解、数据源的设置、SQL映射文件的编写、动态SQL的使用、事务管理、结果集映射、参数映射、自定义类型处理器、异常处理以及...

    apache开源项目源码ibatis-3-core-src-3.0.0.227(ibatis框架java源程序)

    apache开源项目源码ibatis-3-core-src-3.0.0.227 ibatis框架java源程序 spring,struts,hibernate,ibatis,框架源码 各种ibatis框架应用源码,你会从中得到意想不到的效果! apache开源组织开发的开源项目源码,其...

    ibatis的批量插入DAO实例

    本篇将深入探讨如何在Ibatis中实现批量插入数据的DAO(Data Access Object)实例,以及相关的源码分析。 首先,Ibatis允许我们通过SQL映射文件来定义SQL语句,这种方式比传统的JDBC更加灵活且易于维护。批量插入...

    iBATIS-SqlMaps-2_cn.pdf

    《iBATIS-SqlMaps-2_cn.pdf》是关于iBATIS SQL Maps的中文版文档,它详尽地阐述了如何使用SQL Maps来构建数据库驱动的Java应用。iBATIS是一个开源的Java库,它的核心功能是简化Java应用程序与数据库之间的交互,尤其...

    iBATIS-SqlMaps-2 PDF文档资料中文

    iBATIS-SqlMaps-2 是一套针对Java开发者的开源持久层框架,它提供了一种将SQL查询与Java代码解耦合的方式,使得开发者能够更方便地管理数据库操作。这个PDF文档资料集全面介绍了如何使用iBATIS-SqlMaps-2进行数据库...

    ibatis-3-core-3.0.0.242.jar.zip

    ibatis-3-core-3.0.0.242.jar.zipibatis-3-core-3.0.0.242.jar.zipibatis-3-core-3.0.0.242.jar.zipibatis-3-core-3.0.0.242.jar.zipibatis-3-core-3.0.0.242.jar.zip

    ibatis批量存储

    1. Iterate标签详解及应用: Ibatis的iterate标签主要用于循环处理集合数据,它允许我们在动态SQL中实现类似Java的for-each循环。例如,当需要批量插入多条数据时,可以将数据集放入List中,然后在SQL语句中使用...

    ibatis-SqlMaps-开发指南-version 1.0 及 ibatis-SqlMaps-开发指南-version 2

    《iBATIS-SqlMaps-开发指南》是针对iBATIS框架的重要参考资料,分为version 1.0和version 2两个版本。iBATIS是一个Java编程语言中的持久层框架,它允许开发者将SQL语句与Java代码分离,提高了数据访问的灵活性和效率...

    iBATIS-SqlMaps-2_cn1.pdf

    iBATIS-SqlMaps ibatis入门教程,教你如何做配置ibatis

    iBATIS-SqlMaps-2_ja.pdf

    ### iBATIS-SqlMaps-2_ja.pdf 相关知识点 #### iBATIS Data Mapper 概览 iBATIS Data Mapper(也称为 SQL Maps)是一个开源框架,它旨在简化与关系数据库交互所需的 Java 代码量。通过使用简单的 XML 配置文件,...

    iBATIS-SqlMaps-2_cn.rar

    通过学习这个压缩包的内容,开发者可以掌握如何在Java项目中集成和使用iBATIS-SqlMaps-2,从而提高数据库操作的效率和灵活性。此外,了解iBATIS的高级特性如结果映射、缓存机制和动态SQL,可以帮助开发者编写出更加...

Global site tag (gtag.js) - Google Analytics