mybatis批量插入/新增数据

1、原生批量插入性能好
原生批量插入方法是依靠 MyBatis 中的 foreach 标签,将数据拼接成一条原生的 insert 语句一次性执行的,核心实现代码如下。

    <insert id="insertBatch">
        INSERT INTO sys_device_software(device_id,software_id) VALUES
        <foreach collection="list" separator="," item="item">
            (#{item.deviceId},#{item.softwareId})
        </foreach>
    </insert>

2、mybatis-plus批量插入方法简单,不用写SQL
mybatis-plus批量插入功能核心实现类有三个:UserController(控制器)、UserServiceImpl(业务逻辑实现类)、UserMapper(数据库映射类),它们的调用流程如下:

注意此方法实现需要先添加 MP 框架,打开 pom.xml 文件添加如下内容:

<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-boot-starter</artifactId>
    <version>mybatis-plus-latest-version</version>
</dependency>
  • controller实现:
public class UserController {

    @Autowired
    private UserServiceImpl userService;

    /**
     * 批量插入(自定义)
     */
    @RequestMapping("/mysavebatch")
    public boolean mySaveBatch(){
        List<User> list = new ArrayList<>();
        // 待添加(用户)数据
        for (int i = 0; i < 1000; i++) {
            User user = new User();
            user.setName("test:"+i);
            user.setPassword("123456");
            list.add(user);
        }
        return userService.saveBatchCustom(list);
    }
}
  • 业务逻辑层实现:
@Service
public class UserServiceImpl extends ServiceImpl<UserMapper,User>
        implements UserService {

    @Autowired
    private UserMapper userMapper;

    public boolean saveBatchCustom(List<User> list){
        return userMapper.saveBatchCustom(list);
    }
}
  • 持久层实现
@Mapper
public interface UserMapper extends BaseMapper<User>{

    boolean saveBatchCustom(List<User> list);
}

两种方法的性能对比,请参考:https://www.cnblogs.com/vipstone/p/15383065.html

posted @ 2022-03-24 17:58  兔宝快递  阅读(5071)  评论(0编辑  收藏  举报