mybatis 扩展 批量插入

mybatis 扩展 批量插入

场景

mybatis plus 中有批量插入的方法 saveBatch, 不过这个最后 还是循环遍历插入,其实还有其他方式, 给 BaseMapper中增加另一个批量插入的方法 insertBatchSomeColumn, 其实 mybatis plus 早就 实现了,只不过没有在 BaseMapper中加入

InsertBatchSomeColumn实现

就是拼接成如 insert into table (c1,c2) values(v1,v2),(v11,v22) 这种SQL

ExtBaseMapper

自定义 ExtBaseMapper

java 复制代码
public interface ExtBaseMapper<T> extends BaseMapper<T> {

    /**
     * 批量插入: insertBatchSomeColumn 名称和 InsertBatchSomeColumn 中 getMethod 方法相同
     * @param list
     */
    void insertBatchSomeColumn(@Param("list") List<T> list);
}

重写 DefaultSqlInjector

java 复制代码
public class ExtSqlInjector extends DefaultSqlInjector {
    @Override
    public List<AbstractMethod> getMethodList(Class<?> mapperClass) {
        List<AbstractMethod> methodList = super.getMethodList(mapperClass);
        methodList.add(new InsertBatchSomeColumn());
        return methodList;
    }
}

依赖注入

java 复制代码
@Bean
public ExtSqlInjector extSqlInjector(){
    return new ExtSqlInjector();
}

注意,把 ExtBaseMapper 放在 mapperscan 包下

java 复制代码
public interface UserMapper extends ExtBaseMapper<ReservationDeviceConfigModel> {
}

测试

java 复制代码
public void addBatch() {
    List<UserModel> list = new ArrayList<>();
    for (int i = 0; i < 2; i++) {
        UserModel  m = new UserModel();
        m.setServerUrl("teset"+i);
        list.add(m);
    }
    baseMapper.insertBatchSomeColumn(list);
    System.out.println(JSON.toJSONString(list));
}

结果

bash 复制代码
  INSERT INTO t_reservation_device_config (server_url,create_time,update_time) VALUES   
('teset0',null,null)
 , 
('teset1',null,null)

[{"id":2,"serverUrl":"teset0"},{"id":3,"serverUrl":"teset1"}]

可以发现 批量插入成功,并返回了自增 Id

相关推荐
凯酱2 小时前
MyBatis-Plus分页插件的使用
java·tomcat·mybatis
我是福福大王4 小时前
MyBatis源码学习总结
后端·mybatis
江沉晚呤时6 小时前
深入了解C# List集合及两种常见排序算法:插入排序与堆排序
windows·sql·算法·oracle·c#·排序算法·mybatis
爱的叹息7 小时前
mybatis-plus里的com.baomidou.mybatisplus.core.override.MybatisMapperProxy 类的详细解析
java·tomcat·mybatis
打死不学Java代码1 天前
PaginationInnerInterceptor使用(Mybatis-plus分页)
android·java·mybatis
Code哈哈笑1 天前
【Spring Boot】深入解析:#{} 和 ${}
java·spring boot·后端·spring·mybatis
quququ_21381 天前
Java面试:从Spring Boot到微服务的全面考核
spring boot·微服务·kubernetes·mybatis·hibernate·java面试
BillKu2 天前
Spring Boot + MyBatis 动态字段更新方法
java·spring boot·mybatis
我家领养了个白胖胖2 天前
#和$符号使用场景 注意事项
java·后端·mybatis
论迹2 天前
【JavaEE】-- MyBatis操作数据库(1)
java·开发语言·数据库·java-ee·mybatis