3.原生批量插入
原生批量插入方法是依靠 MyBatis 中的 foreach 标签,将数据拼接成一条原生的 insert 语句一次性执行的,核心实现代码如下。
① 业务逻辑层扩展
在 UserServiceImpl 添加 saveBatchByNative 方法,实现代码如下:
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.example.demo.mapper.UserMapper; import com.example.demo.model.User; import com.example.demo.service.UserService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.List; @Service public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService { @Autowired private UserMapper userMapper; public boolean saveBatchByNative(List<User> list) { return userMapper.saveBatchByNative(list); } }
② 数据持久层扩展
在 UserMapper 添加 saveBatchByNative 方法,实现代码如下:
import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.example.demo.model.User; import org.apache.ibatis.annotations.Mapper; import java.util.List; @Mapper public interface UserMapper extends BaseMapper<User> { boolean saveBatchByNative(List<User> list); }
③ 添加 UserMapper.xml
创建 UserMapper.xml 文件,使用 foreach 标签拼接 SQL,具体实现代码如下:
<?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.example.demo.mapper.UserMapper"> <insert id="saveBatchByNative"> INSERT INTO `USER`(`NAME`,`PASSWORD`) VALUES <foreach collection="list" separator="," item="item"> (#{item.name},#{item.password}) </foreach> </insert> </mapper>
经过以上步骤,我们原生的批量插入功能就实现的差不多了,接下来我们使用单元测试来查看一下此方法的执行效率。