首先创建一个基础接口继承mybatis-plus的BaseMapper,同时添加一个批量插入方法
public interface CustomMapper<T> extends BaseMapper<T> {
/**
* 批量插入数据
*
* @param collection 插入集合
* @return 插入条数
*/
Integer insertBatchSomeColumn(Collection<T> collection);
}
创建sql注入器类继承DefaultSqlInjector,并重写getMethodList,将批量插入方法添加进去
public class CustomSqlInterceptor extends DefaultSqlInjector {
@Override
public List<AbstractMethod> getMethodList(Class<?> mapperClass, TableInfo tableInfo) {
List<AbstractMethod> methods = super.getMethodList(mapperClass,tableInfo);
methods.add(new InsertBatchSomeColumn());
return methods;
}
}
创建mybatis-plus配置类,将刚才的注入器注册到spring容器中
@Configuration
@EnableTransactionManagement
public class MybatisPlusConfig {
/**
* 定义批量插入方法
*/
@Bean
public CustomSqlInterceptor customSqlInterceptor() {
return new CustomSqlInterceptor();
}
}
创建一个业务mapper继承刚才创建的CustomMapper
@Mapper
public interface UserMapper extends CustomMapper<User> {
}
测试批量添加方法
//用户实体
@Data
@AllArgsConstructor
@NoArgsConstructor
@ApiModel(value = "User", description = "用户信息")
public class User implements Serializable {
private static final long serialVersionUID = 1L;
/**
* 用户id
*/
@TableId(value = "id", type = IdType.AUTO)
private Integer id;
/**
* 用户名
*/
@ApiModelProperty(value = "用户名")
private String userName;
/**
* 用户电话
*/
@ApiModelProperty(value = "用户电话")
private String phone;
/**
* 用户密码
*/
@ApiModelProperty(value = "用户密码")
private String passWord;
/**
* 数据状态:1-正常,2-删除
*/
@ApiModelProperty(value = "数据状态")
private Integer state;
}
//service
@Service
@Transactional(rollbackFor = Exception.class)
public class UserServiceImpl implements UserService {
@Resource
private UserMapper userMapper;
@Override
public Integer batchInsertUser(List<User> userList) {
return userMapper.insertBatchSomeColumn(userList);
}
}
//controller
@RestController
@RequestMapping("/user")
@CrossOrigin
@Api(tags = "用户控制类")
public class UserController {
@Resource
private UserService userService;
@PostMapping("/batchInsertUser")
@ApiOperation(value = "批量插入用户信息", notes = "批量插入用户信息")
@ApiImplicitParams({
@ApiImplicitParam(name = "userList", value = "用户集合", allowMultiple = true, paramType = "body", dataType = "User", required = true)
})
public Integer batchInsertUser(@RequestBody() @Validated List<User> userList) {
return userService.batchInsertUser(userList);
}
}
批量插入结果
插入前
请求json
[
{
"passWord": "111111",
"phone": "11000000000",
"state": 1,
"userName": "张三"
},
{
"passWord": "222222",
"phone": "12000000000",
"state": 1,
"userName": "李四"
},
{
"passWord": "333333",
"phone": "13000000000",
"state": 1,
"userName": "王五"
}
]
插入后