Mybaties中数据批量插入

本文探讨了在Oracle数据库中使用特定MyBatis配置进行批量插入时遇到的问题。通过一个具体的XML配置示例,展示了如何为每条记录生成唯一ID,但同时指出此方法在Oracle环境下存在的局限性。

<insert id="insertProductRelation" parameterType="java.util.List">

                   <selectKey resultType="java.lang.Integer" order="BEFORE" keyProperty="relationId">

                                  select seq_relation_goods_attribute.nextval as relationId from dual

                   </selectKey>

insert into t_relation_goods_attribute(relation_id,...)

values

<foreach collection="list" item="obj" index="index" separator=",">

        (#{obj.relationId,jdbcType=NUMERIC},...)

</foreach>

 

 

不支持oracle数据库插入!!

 

 

 

 

在MyBatis中进行批量插入数据,主要借助SQL的批量插入语法以及MyBatis的`foreach`语句来实现。 ### 基本SQL语法 基本的SQL批量插入语法为`insert into tableName1 (column1,column2) values ("字段1","字段2"),("字段1","字段2")`。例如要插入`User`实体类对应的数据,`User`类定义如下: ```java import lombok.Data; import lombok.RequiredArgsConstructor; import lombok.experimental.Accessors; import java.util.Date; @Data @RequiredArgsConstructor(staticName = "of") @Accessors(chain = true) public class User { private String name; private Integer age; private Date birthday; } ``` ### MyBatis XML配置示例 以下是一个MyBatis XML中批量插入数据的示例: ```xml <!--批量插入数据--> <insert id="batchInsertEctoolsPayments" parameterType="java.util.List"> insert into sdb_ectools_payments (payment_id,money,pay_app_id,t_confirm,order_id,source_name,merchant_bn) values <foreach collection="pbList" item="item" index="index" separator=","> ( #{item.paymentId,jdbcType=VARCHAR}, #{item.money,jdbcType=VARCHAR}, #{item.payAppId,jdbcType=VARCHAR}, #{item.tconfirm,jdbcType=VARCHAR}, #{item.orderId,jdbcType=VARCHAR}, #{item.sourceName,jdbcType=VARCHAR}, #{item.merchantBn,jdbcType=VARCHAR} ) </foreach> </insert> ``` 在这个示例中,`foreach`标签的属性含义如下: - `collection`:指定要迭代的集合,该属性必须指定,不同情况下值不同。 - `item`:表示集合中每一个元素进行迭代时的别名。 - `index`:指定一个名字,用于表示在迭代过程中每次迭代到的位置。 - `separator`:表示在每次进行迭代之间以什么符号作为分隔符。 ### 服务层调用示例 以下是服务层调用批量插入的示例: ```java import com.google.common.collect.Lists; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.List; @Service public class UserInfoService { @Autowired private UserInfoDao userInfoDao; public void insertList() { List<UserInfo> userInfoList = Lists.newArrayList(); userInfoList.add(new UserInfo("1", "jiejie", "17")); userInfoList.add(new UserInfo("2", "jiejie", "18")); userInfoList.add(new UserInfo("3", "jiejie", "30")); userInfoDao.insertList(userInfoList); } } ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值