发布时间:2024-10-28 17:01
mybatis-plus 当前我用的最新版本
com.baomidou
mybatis-plus-boot-starter
3.5.1
找到这里我不用多说了,mybatis-plus源码的批量插入和修改是通过for循环转化为多条的单条SQL循环进行插入和修改,所以该方法是SQL拼接成一条SQL传入数据库
批量插入:
package com.guide.common.mybatis.mapper;
import java.util.List;
/**
* @author
* @version 1.0
* @date 2022/5/6 10:34
*/
public interface SpiceBaseMapper {
/**
* 批量插入
* {@link com.baomidou.mybatisplus.extension.injector.methods.InsertBatchSomeColumn}
*
* @param entityList 要插入的数据
* @return 成功插入的数据条数
*/
int insertBatchSomeColumn(List entityList);
}
package com.guide.common.mybatis.mapper;
import com.baomidou.mybatisplus.core.injector.AbstractMethod;
import com.baomidou.mybatisplus.core.injector.DefaultSqlInjector;
import com.baomidou.mybatisplus.extension.injector.methods.AlwaysUpdateSomeColumnById;
import com.baomidou.mybatisplus.extension.injector.methods.InsertBatchSomeColumn;
import org.springframework.stereotype.Component;
import java.util.List;
/**
* @author
* @version 1.0
* @date 2022/5/6 10:28
*/
@Component
public class SpiceSqlInjector extends DefaultSqlInjector {
/**
* 如果只需增加方法,保留mybatis plus自带方法,
* 可以先获取super.getMethodList(),再添加add
*/
@Override
public List getMethodList(Class> mapperClass) {
// 注意:此SQL注入器继承了DefaultSqlInjector(默认注入器),调用了DefaultSqlInjector的getMethodList方法,保留了mybatis-plus的自带方法
List methodList = super.getMethodList(mapperClass);
// 注入InsertBatchSomeColumn
// 在!t.isLogicDelete()表示不要逻辑删除字段,!\"update_time\".equals(t.getColumn())表示不要字段名为 update_time 的字段,不对进行操作
// methodList.add(new InsertBatchSomeColumn(t -> !t.isLogicDelete() && !\"update_time\".equals(t.getColumn())));
// 要逻辑删除 t.isLogicDelete() 默认不要
methodList.add(new InsertBatchSomeColumn(t -> !t.isLogicDelete()));
return methodList;
}
}
记住Java是可以接口多继承的