【Mybatis】Mybatis批量插入操作【详细教程】

前言🎶

对于我们在开发中很多场景都会遇到一些批量数据的插入操作,这篇文章我会简单展示一下案例和在插入时所注意的事项。

案例🌹

首先看一下我们的Mapper.xml文件中的批量插入语法。

<insert id="saveBatchFeedback">
        insert into t_feedback(
        <include refid="Base_Column_List"/>
        ) values
        <foreach collection="list" separator="," item="item" index="index">
            (
            #{item.feedbackId,jdbcType=VARCHAR},
            #{item.customerId,jdbcType=VARCHAR},
            #{item.projectId,jdbcType=VARCHAR},
            #{item.moduleName,jdbcType=VARCHAR},
            #{item.menuName,jdbcType=VARCHAR},
            #{item.feedbackContent,jdbcType=VARCHAR},
            #{item.feedbackDept,jdbcType=VARCHAR},
            #{item.feedbackUser,jdbcType=VARCHAR},
            #{item.requestTime,jdbcType=VARCHAR},
            #{item.feedbackFile,jdbcType=VARCHAR},
            #{item.feedbackMemo,jdbcType=VARCHAR},
            #{item.insertTime,jdbcType=VARCHAR},
            #{item.insertUser,jdbcType=VARCHAR}
            )
        </foreach>
    </insert>
  • 首先是include 标签里是我们定义的字段(我使用的是sql引用,也可以直接在括号中定义),里面的字段数量要和循环赋值里面的字段保持一致

include标签中的内容

<sql id="Base_Column_List">
    feedback_id, customer_id, project_id, module_name, menu_name, feedback_content, feedback_dept, 
    feedback_user, feedback_file, request_time, feedback_memo, insert_time, insert_user
  </sql>
  • 我们可以看到foreach标签中有一个collection属性,这对应的是你在Mapper接口中的类型,如果在Mapper接口中有多个参数的话,对应的值需要使用@Param()注解来表示。
  • collection中的属性值是list,代表我们在Mapper接口中传过来的类型是list,如果Mapper接口层是array,则collection的值必须是array
  • item属性值默认为item,可以随便起别名,他的用途是我们可以使用item.我们在集合或者数组中的属性来进行赋值
  • 另外可以看到我把feedback主键id给放到批量添加语法中了,因为数据库没有使用自增,所以我在集合中对id进行赋值了。(如果你的表注解是自增的话,就不用在批量插入中定义

如果有对在SQL中公共引用不熟悉的可以去看一下我的这篇文章:
sql字段的公共引用

我们看一下我们的Mapper接口🐱‍🚀

//批量添加反馈
int saveBatchFeedback(@Param("list") List<TFeedback> list);

因为我们是list集合来进行批量插入,所以在xml中collection的属性值为list

然后我们看一下controller的处理方式🎁

	@RequestMapping("saveBatchFeedback")
    public Message saveBatchFeedback(String feedbackJson) {
        List<TFeedback> list = JSONArray.parseArray(feedbackJson, TFeedback.class);
        feedbackMapper.saveBatchFeedback(list);
        ......
    }

可以看到我定义的是一个JSON字符串,这样的话是比较简单的(因为前端也是我开发的,不会用集合进行传参,菜鸡一个),然后我们将这个JSON串通过fastjson工具来转为我们的一个List集合数据,然后调用Mapper接口方法进行添加。

  • JSONArray.parseArray()第一个参数是我们需要进行转换的JSON字符串,第二个参数是我们要将这个JSON串转为什么类型。
  • :这一步的话很容易出错,我们可以将前端传过来的JSON字符串打个断点,并将字符串的内容复制到在线JSON校验工具中验证是否为正确的JSON字符串(本人经历😭)。
    在线JSON校验地址在线JSON校验地址

当然我们也可以使用List集合来接受前端发送过来的一个JSON格式的集合,如下👇

	@RequestMapping("saveBatchFeedback")
    public Message saveBatchFeedback(List<TFeedback> feedbacks) {
        feedbackMapper.saveBatchFeedback(feedbacks);
        ......
    }

这样的话我们就不需要去将JSON字符串转换为对象了,如果没有其他业务的话,我们可以直接调用Mapper层接口进行批量添加,前提是前端的JSON字段需要跟你List泛型的类型里的字段保持一致

FastJson工具依赖

<dependency>
	<groupId>com.alibaba</groupId>
	<artifactId>fastjson</artifactId>
	<version>1.2.40</version>
</dependency>`

小结🐱‍🐉

这篇文章暂时先分享到这里,如果有不懂的可以看我另一篇Mybatis批量插入文章:Mybatis批量插入
或者是来私信我要源码都可以。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值