mybatis中批量插入、批量更新

本文探讨了在MyBatis中如何进行批量插入和批量更新。在mapper.xml文件中分别展示了这两种操作的实现,并指出在service层可以通过接收返回的插入条数来判断操作是否成功。

一、mapper.xml中批量插入

<insert id="batchInsert">
    INSERT INTO t_order(order_no, member_id, member_name, member_phone, pay_amt, create_time)
    VALUES
    <foreach collection="list" item="e" separator=",">
        (#{e.orderNo},#{e.memberId},#{e.memberName},#{e.memberPhone},#{e.payAmt},#{e.createTime})
    </foreach>
</insert>

此时在service层使用Integer接收插入的条数,根据条数进行判断

Integer rows = orderMapper.batchInsert(orderList);
if(rows !=orderList.size()){
//插入条数不等于列表中条数,抛异常,回滚
throw new Exception("批量插入订单失败!");
}

二、mapper.xml中批量更新

<update id="batchUpdate" parameterType="java.util.List">
    <foreach collection="list" item="e" index="index" open="" close="" separator=";">
        <![CDATA[
        UPDATE t_order
            set member_id = #{e.memberId},
                update_time = #{e.updateTime}
          where
            order_no = #{e.orderNo}
        ]]>
    </foreach>
</update>

此时在service层使用Integer接收插入的条数,根据条数进行判断

Integer rows = orderMapper.batchUpdate(orderList);
if(rows !=1){
//进行批量更新的时候,返回的结果永远都是1,如果不是等于1,抛异常,回滚
throw new Exception("批量更新订单失败!");
}
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); } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值