一、前言
mybatis-plus因为其特性,不需要程序员手动编写SQL,极大的提高了开发效率,使用过程中我们会发现,有些我们需要方法在mybatis-plus中不存在,如批量添加,那么我们可以根据mybatis-plus提供的自定义方法工具来实现我们需要的方法。自定义方法一共三步如下1、2、3:
二、自定义方法实现思路
1、创建一个自定义的SqlInjector类,继承DefaultSqlInjector类,将自定义的加入到方法列表中。
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.core.injector.AbstractMethod;
import com.baomidou.mybatisplus.core.injector.DefaultSqlInjector;
import com.baomidou.mybatisplus.core.metadata.TableInfo;
import com.baomidou.mybatisplus.extension.injector.methods.InsertBatchSomeColumn;
import java.util.List;
/**
* @Author: 宁兴星
* @CreateTime: 2025-01-16
* @Description: TODO
*/
public class MySqlInjector extends DefaultSqlInjector {
@Override
public List<AbstractMethod> getMethodList(Class<?> mapperClass, TableInfo tableInfo) {
List<AbstractMethod> methodList = super.getMethodList(mapperClass, tableInfo);
methodList.add(new InsertBatchSomeColumn(i -> i.getFieldFill() != FieldFill.UPDATE));
return methodList;
}
}
2、将定义好的SqlInjector类配置到Mybatis-Plus的Configuration中
/**
* @Author: 宁兴星
* @CreateTime: 2025-01-16
* @Description: TODO
*/
@Configuration
public class MybatisConfig {
@Bean
public MySqlInjector sqlInjector() {
return new MySqlInjector();
}
/**
* 配置MyBatis-Plus拦截器,用于添加分页等功能插件
*
* @return MybatisPlusInterceptor对象
*/
@Bean
public MybatisPlusInterceptor mybatisPlusInterceptor() {
MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
// 添加分页插件,设置数据库类型为MySQL
interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
// 添加乐观锁插件
interceptor.addInnerInterceptor(new OptimisticLockerInnerInterceptor());
return interceptor;
}
}
3、自定义Mapper接口,继承原plus的BaseMapper
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import java.util.Collection;
/**
* @Author: 宁兴星
* @CreateTime: 2025-1-16
* @Description: TODO
*/
public interface MyBaseMapper<T> extends BaseMapper<T> {
/**
* 自定义plus批量插入
*
* @param entityList
* @return
*/
int insertBatchSomeColumn(Collection<T> entityList);
}
三、代码中运用
4、在自己的Mapper接口中,继承自定义的MyBaseMapper
import com.smart.cms.inte.config.mybatisplusconfig.MyBaseMapper;
import org.apache.ibatis.annotations.Mapper;
/**
* @Author: 宁兴星
* @CreateTime: 2025-01-16
* @Description: TODO
*/
@Mapper
public interface StudentMapper extends MyBaseMapper<studentDto> {
}
5、使用
@Service
public class StudentServiceImpl implements StudentService {
private final StudentMapper studentMapper;
public StudentServiceImpl (StudentMapper studentMapper) {
this.studentMapper= studentMapper;
}
public void test(List<StudentDto> studentList) {
studentMapper.insertBatchSomeColumn(studentList);
}
}
本次分享就结束啦,如有错误,敬请雅正!