【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批量插入
或者是来私信我要源码都可以。

  • 4
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MyBatis通过XML或注解的方式配置要执行的批量插入语句。具体操作如下: 1. 首先,在XML文件中定义批量插入语句。可以使用`<insert>`标签,并设置`useGeneratedKeys`属性为`true`以便获取插入后的自动生成的主键。 2. 在Java代码中,创建一个`SqlSession`对象,并调用`insert`方法来执行批量插入操作。可以使用`SqlSessionFactory`来获取`SqlSession`对象。 3. 为了提高性能,可以将多个插入操作放在一个事务中执行。可以使用`SqlSession`对象的`commit`方法来提交事务,或者使用`SqlSession`对象的`flushStatements`方法来刷新语句并提交事务。 4. 最后,根据需要,可以处理插入操作的结果并返回相应的结果。 综上所述,使用MyBatis进行XML批量插入的步骤如下: 1. 在XML文件中定义批量插入语句,设置`useGeneratedKeys`属性为`true`以便获取插入后的自动生成的主键。 2. 创建`SqlSession`对象,并调用`insert`方法执行批量插入操作。 3. 提交事务并处理插入操作的结果。 请注意,以上步骤是针对XML配置方式的批量插入操作。如果使用注解方式,可以直接在Mapper接口中定义批量插入方法,并在Service层调用该方法来执行批量插入操作。具体方法请参考引用中的示例和引用中的示例。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [MyBatis批量插入的五种方式整理](https://blog.csdn.net/m0_57781768/article/details/128229047)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值