一、什么是SQL注入器
我们在使用Mybatis-Plus时,dao层都会去继承BaseMapper接口,这样就可以用BaseMapper接口所有的方法,BaseMapper中每一个方法其实就是一个SQL注入器
在Mybatis-Plus的核心(core)包下,提供的默认可注入方法有这些:

那如果我们想自定义SQL注入器呢,我们该如何去做?
比如在Mybatis-Plus中调用updateById方法进行数据更新默认情况下是不能更新空值字段的。
而在实际开发过程中,往往会遇到需要将字段值更新为空值的情况。
那如何让Mybatis-Plus支持空值更新呢?
如果仅是想实现支持更新空值字段并不需要我们自定义SQL注入器,因为Mybatis-Plus提供了几个扩展SQL注入器。
二、内置扩展SQL注入器有哪些?
1、自带扩展SQL注入器
Mybatis-Plus 扩展SQL注入器在扩展包下,为我们提供了可扩展的可注入方法:

AlwaysUpdateSomeColumnById : 根据id更新字段(全量更新不忽略null字段),updateById默认会自动忽略实体中null值字段。
InsertBatchSomeColumn : 真实批量插入,saveBatch其实是伪批量插入。
LogicDeleteBatchByIds : 逻辑删除增加填充功能,比如删除的时候填充更新时间、更新人。
Upsert : 插入一条数据(选择字段插入)。
2、SQL注入器全局配置
@Component
public class MySqlInjector extends DefaultSqlInjector {
@Override
public List<AbstractMethod> getMethodList(Class<?> mapperClass, TableInfo tableInfo) {
List<AbstractMethod> methodList = super.getMethodList(mapperClass, tableInfo);
/**
* 把两个扩展内置扩展SQL注入器注入
*/
methodList.add(new InsertBatchSomeColumn(i -> i.getFieldFill() != FieldFill.UPDATE));
methodList.add(new AlwaysUpdateSomeColumnById(i -> i.getFieldFill() != FieldFill.INSERT));
return methodList;
}
}
3、自定义Mapper
pub

文章介绍了Mybatis-Plus中SQL注入器的概念,包括BaseMapper接口中的默认方法以及如何自定义SQL注入器来支持更新空值字段。通过扩展SQL注入器AlwaysUpdateSomeColumnById和InsertBatchSomeColumn等,可以实现全量更新和批量插入功能。同时,文章提供了一个自定义SQL注入器FindAll的示例,展示了如何注册并测试这个新方法。
最低0.47元/天 解锁文章
599

被折叠的 条评论
为什么被折叠?



