背景
使用 Mybatis
向数据库中批量插入数据。
实现
实体类
例如需要在数据库中批量插入如下实体类:
package com.langjialing.springbootpagehelperdemo.entity;
import java.io.Serializable;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;
/**
* <p>
* 用户表
* </p>
*
* @author 郎家岭伯爵
* @since 2023-01-11
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
@Accessors(chain = true)
@ApiModel(value="User对象", description="用户表")
public class User implements Serializable {
private static final long serialVersionUID = 1L;
@ApiModelProperty(value = "用户ID")
private Integer userId;
@ApiModelProperty(value = "用户名")
private String userName;
@ApiModelProperty(value = "用户密码")
private String password;
}
Service层
Service接口写法
不同于单条数据,插入多条数据时需要把参数定义为 List
类型。
Boolean addUsers(List<User> users);
Service接口实现类
@Override
public Boolean addUsers(List<User> users) {
return userMapper.addUsers(users);
}
Controller层
Controller 层同样需要把参数定义为 List
类型:
@ApiOperation("批量增加用户")
@PostMapping("/addUsers")
public Boolean addUsers(@RequestBody @Validated List<User> users){
return userService.addUsers(users);
}
Mapper类
Boolean addUsers(List<User> users);
UserMapper.xml文件
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.langjialing.springbootpagehelperdemo.mapper.UserMapper">
<!-- 通用查询映射结果 -->
<resultMap id="BaseResultMap" type="com.langjialing.springbootpagehelperdemo.entity.User">
<result column="user_name" property="userName" />
<result column="password" property="password" />
</resultMap>
<!-- 通用查询结果列 -->
<sql id="Base_Column_List">
user_id, user_name, password
</sql>
<insert id="addUsers"
parameterType="com.langjialing.springbootpagehelperdemo.entity.User">
insert into `user` (user_name, password)
values
<foreach collection="users" item="item" separator=",">
(#{item.userName}, #{item.password})
</foreach>
</insert>
</mapper>
总结
对比于单条数据,使用 Mybatis 批量操作数据时,只需要把各层级中的参数修改为 List
类型,同时在 Mapper.xml
使用 foreach
语法即可。其它均是一样的。