mybatis 批量插入

xu.wang

发布于 2017.12.16 14:18 阅读 5771 评论 1

CustomerMapper.class

int addCustomerRecordBatch(@Param("list") List<Customer> list);


CustomerMapper.xml

 

<!--批量插入--> 
<insert id="addCustomerRecordBatch" parameterType="java.util.List" > 
 insert into customer (source, seller_id, seller_name, update_time, children_name) values
 <trim suffixOverrides="," > 
 <foreach collection="list" index="list" item="item" > 
 <trim prefix=" (" suffix=")" suffixOverrides="," > 
        #{item.source,jdbcType=VARCHAR},
        #{item.sellerId,jdbcType=INTEGER},
        #{item.sellerName,jdbcType=VARCHAR}, 
        #{item.updateTime,jdbcType=TIMESTAMP},
        #{item.childrenName,jdbcType=VARCHAR},
        #{item.childrenAge,jdbcType=DOUBLE}   
</trim>,
 </foreach> 
 </trim>  
 </insert> 

 

注意:

@Param("list")的名字要和 mapper.xml 中的index的值对对应起来。

foreach的主要用在构建in条件中,它可以在SQL语句中进行迭代一个集合。foreach元素的属性主要有 item,index,collection,open,separator,close。item表示集合中每一个元素进行迭代时的别名,index指 定一个名字,用于表示在迭代过程中,每次迭代到的位置,open表示该语句以什么开始,separator表示在每次进行迭代之间以什么符号作为分隔 符,close表示以什么结束,在使用foreach的时候最关键的也是最容易出错的就是collection属性,该属性是必须指定的,但是在不同情况 下,该属性的值是不一样的,主要有一下3种情况:

 

 

1.如果传入的是单参数且参数类型是一个List的时候,collection属性值为list

2.如果传入的是单参数且参数类型是一个array数组的时候,collection的属性值为array

3.如果传入的参数是多个的时候,我们就需要把它们封装成一个Map了,当然单参数也可以封装成map

关于foreach的具体例子在这里就先不举,以后有机会可以把每一种情况都举一个例子列出来。