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

ibatis批量插入 配置

 
阅读更多

今天批量插入看了网上一个这样的讲解,发现插入的时候一直不成功,折腾了很久才明白批量插入LIST对象的配置应该要改成如下 就成功插入了

<insert id="insertDrillPlanList" parameterClass="java.util.List">
        	INSERT INTO ITMS.DRILL_BRANCH_YEARPLAN( BRANCH_NO, YEAR_NO,
				DRILL_ID, LINE_CODE, LINE_NAME, ITEM_CODE, ITEM_NAME, DRILL_CNT,
				DRILL_DATES, INPUT_USER, INPUT_TIME) VALUES  
		<iterate conjunction="," >            
	            ( #[].branchNo#, #[].year#,
				#[].drillId#, #[].lineCode#, #[].lineName#, #[].itemCode#, #[].itemName#,
				#[].drillCnt#, #[].drillDates#, #[].inputUser#, #[].inputTime# )
		</iterate>
</insert>

 前面用[]来表示当前的对象。<iterate conjunction="," >这里也有一些问题,不能加open(close)这些属性,因为正确的insert table ()values (),(),()...的格式

 

参考文献:

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

 
2012-02-15 23:53:10--点击数:
更多
 
 
<!--本内容来自第七城市www.th7.cn-->

 我们都知道mysql支持:

 

Sql代码  
  1. insert into   
  2.     tb_name(col1, col2, col3)   
  3.     values   
  4.     (col1_v, col2_v, col3_v),   
  5.     (col1_v, col2_v, col3_v),  
  6.      ...  

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

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

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

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

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

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

iterate标签有几个属性:

 

Xml代码  
  1. <iterate  
  2.     property="" /*可选,   
  3.         从传入的参数集合中使用属性名去获取值,   
  4.         这个必须是一个List类型,   
  5.         否则会出现OutofRangeException,   
  6.         通常是参数使用java.util.Map时才使用,   
  7.         如果传入的参数本身是一个java.util.List, 不能只用这个属性.  
  8.         不知道为啥官网: http://ibatis.apache.org/docs/dotnet/datamapper/ch03s09.html#id386679  
  9.         说这个属性是必须的, 但是测试的时候是可以不设置这个属性的, 还望那位大虾知道, 讲解一下.  
  10.         */  
  11.     conjunction="" /*可选,   
  12.         iterate可以看作是一个循环,   
  13.         这个属性指定每一次循环结束后添加的符号,   
  14.          比如使每次循环是OR的, 则设置这个属性为OR*/  
  15.     open="" /*可选, 循环的开始符号*/  
  16.     close="" /*可选, 循环的结束符号*/  
  17.     prepend="" /*可选, 加在open指定的符号之前的符号*/  
  18. ></iterate>  

 我们设置来做个实验:

 

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

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

 

Java代码  
  1. select * from tb_name where id=123 prepend open 1111 conn 2222 conn 3333 close  

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

 

Xml代码  
  1. <insert id="betchAddNewActiveCode" parameterClass="java.util.List">  
  2.     <![CDATA[ 
  3.         insert into tb_active_code(code, create_user_id, create_time) values 
  4.     ]]>  
  5.     <iterate conjunction=",">  
  6.         <![CDATA[ 
  7.             (#codes[].code#, #codes[].createUserId#, #codes[].createTime#) 
  8.         ]]>  
  9.     </iterate>  
  10. </insert>  

 产生sql语句:

 

Sql代码  
  1. insert into tb_active_code(code, create_uin, create_time) values (?, ?, ?) , (?, ?, ?) , (?, ?, ?)  

 但是如果:

 

Xml代码  
  1. <insert id="betchAddNewActiveCode" parameterClass="java.util.List">  
  2.     <![CDATA[ 
  3.         insert into tb_active_code(code, create_user_id, create_time) values 
  4.     ]]>  
  5.     <iterate conjunction="," open="(" close=")">  
  6.         <![CDATA[ 
  7.             /*这里不加"("和")"*/ 
  8.             #codes[].code#, #codes[].createUserId#, #codes[].createTime# 
  9.         ]]>  
  10.     </iterate>  
  11. </insert>  

 那么产生的sql语句为:

 

Java代码  
  1. insert into tb_active_code(code, create_uin, create_time) values ( ?, ?, ?   ,   ?, ?, ?   ,   ?, ?, ?)  

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

 

分享到:
评论

相关推荐

    ibatis3批量插入

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

    ibatis的批量插入DAO实例

    通过以上步骤,我们就完成了Ibatis批量插入的DAO实例。在实际项目中,根据业务需求可能需要对SQL语句进行优化,如开启或关闭数据库的自动提交,或者调整批处理的大小以平衡性能和内存消耗。此外,Ibatis还支持使用`...

    ibatis批量处理

    ### iBatis批量处理知识点详解 #### 一、iBatis基本实现 iBatis(现已更名为MyBatis)是一款优秀的持久层框架,它支持定制化SQL、存储过程及高级映射。iBatis避免了几乎所有的JDBC代码和手动设置参数以及获取结果...

    Mybatis 3+Mysql 实现批量插入

    本文将深入探讨如何利用MyBatis框架结合MySQL数据库实现批量插入功能,包括其原理、配置、代码实现以及优化策略。 ### 一、MyBatis框架简介 MyBatis是一个优秀的持久层框架,它支持定制化SQL、存储过程以及高级...

    IBatis.NET开发文档

    - 批量操作:如何利用iBATIS进行批量插入、更新或删除。 - 动态SQL的最佳实践:分享编写高效动态SQL的技巧和注意事项。 通过深入学习这些文档,开发者可以熟练掌握iBATIS.NET,实现高效、灵活的数据访问,同时...

    ibatis api,ibatis文档,ibatis说明文档

    Ibatis提供了两种执行器:SimpleExecutor和BatchExecutor,分别对应单条SQL执行和批量SQL执行。 5. ParameterMap和ParameterHandler:它们负责参数的设置和处理,ParameterMap代表了SQL参数的映射关系,而...

    ibatis日期格式.doc

    iBatis是一个轻量级的持久层框架,它允许开发者将SQL语句直接写在XML配置文件中,方便数据库操作。 在小组后台管理中,存在以下几个与iBatis相关的问题: 1. **小组分类管理** - **问题1**: 在删除二级分类时,未...

    ibatis 中文手册

    1. **批处理**:通过设置 SqlSession 的 flushCache 和 autoCommit 属性,可以实现批量插入、更新等操作,提高性能。 2. **合理使用缓存**:根据业务需求调整缓存策略,避免不必要的数据库访问。 **七、与其他技术...

    ibatis简单例子

    5. **Executor**: 执行器,是Ibatis内部处理SQL的组件,有简单执行器、缓存执行器和批量执行器等类型。 6. **Statement**: 表示一个SQL语句,可以是PreparedStatement或SimpleStatement,Ibatis根据配置自动处理...

    iBatis操作

    ### iBatis批量操作 #### 一、简介 在企业级应用开发中,数据库操作是不可或缺的一部分。为了提高效率和减少资源消耗,批量处理成为了一种常用的技术手段。本文将介绍如何利用iBatis框架进行批量添加、修改、删除...

    ibatis 使用手册

    1. **配置文件**: iBatis的配置文件定义了数据库连接信息、SqlMap的位置等,是系统运行的基础。 2. **SqlMap**: SqlMap是iBatis的核心,它包含了SQL语句和结果映射。每个SqlMap元素代表一个数据库表,而SqlMap中的...

    ibatis官方中文文档

    此外,文档还特别强调了如何通过iBATIS来调用存储过程,这是数据库操作中的一个重要特性,尤其是在处理复杂逻辑或批量操作时。 **iBATIS-SqlMaps-2-Tutorial_cn.pdf** 作为教程,这份文档提供了逐步指导,帮助读者...

    ibatis-2.3.

    10. **Batch Operations**: iBATIS 支持批量操作,如插入、更新和删除,可以提高数据处理效率。 从描述 "ibatis-2.3.ibatis-2.3.ibatis-2.3" 看,似乎是在强调这个版本,但并没有提供额外的信息。标签 "ibat" 显然...

    ibatis环境搭建教程

    在ibatis中,配置文件通常包括`sqlmap`、`datasource`、`settings`等元素,下面详细介绍这些配置项的作用: ##### 1. SQL Map配置 - ****:用于定义和引用属性值,可以在配置文件中使用这些属性值来动态配置参数。 ...

    ibatis-2-mybatis-2.3.5.zip

    4. 批量操作:BatchExecutor适用于批量插入、更新和删除操作,提高性能。 六、进阶话题 1. 映射器工厂:理解SqlSessionFactoryBuilder、SqlSessionFactory和SqlSession之间的关系,以及如何通过它们创建和管理映射...

    ibatis 完美例子 一对多 批处理 事务 和 spring struts2集成

    在Ibatis中,可以通过设置SqlSession的flushCache和useCache属性,以及使用批处理执行器ExecutorType.BATCH,来实现批量插入、更新或删除。例如,在插入1万条数据时,将这些操作放在同一个SqlSession中,而不是逐一...

    ibatis源代码

    例如,了解Executor的实现方式,可以在必要时实现自己的Executor以提高批量插入或更新的效率。 总结,Ibatis源代码的学习不仅有助于理解框架的内部工作机制,还能提升开发者在数据库操作方面的编程能力,使得在实际...

Global site tag (gtag.js) - Google Analytics