前言🎶
对于我们在开发中很多场景都会遇到一些批量数据的插入操作,这篇文章我会简单展示一下案例和在插入时所注意的事项。
案例🌹
首先看一下我们的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的值必须是arrayitem属性值默认为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批量插入
或者是来私信我要源码都可以。
978

被折叠的 条评论
为什么被折叠?



