淘宝禁止了网站建设类,wordpress二次元主题,求推荐专门做借条的网站,凡客诚品衣服文章目录 场景官方插件源码解析项目细节小结 场景
在许多业务场景下#xff0c;需要对tkMapper的功能进行增强#xff0c;需要用到批量新增和批量更新#xff08;这里是唯一主键去更新的#xff09;#xff0c;许多论文博客自己写的看起来并不行#xff0c;我们这里就采… 文章目录 场景官方插件源码解析项目细节小结 场景
在许多业务场景下需要对tkMapper的功能进行增强需要用到批量新增和批量更新这里是唯一主键去更新的许多论文博客自己写的看起来并不行我们这里就采用官方的模式一次跑通
官方插件
这里是我通过中央仓库发现的一个宝库平常对额外功能的增强需要自己常在中央仓库去逛逛看。
依赖地址
dependencygroupIdtk.mybatis/groupIdartifactIdmapper-spring-boot-starter/artifactIdversion4.2.3/version
/dependency
dependencygroupIdtk.mybatis/groupIdartifactIdmapper-extra/artifactIdversion4.2.3/version
/dependency
starter是启动器extra则是扩展插件里面就有我们所需的功能
源码解析
我们来看看官方作者的实现方式到底是什么看看这个具体的provider的实现原理其实底层就是foreach
package tk.mybatis.mapper.additional.update.batch;import java.util.List;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.UpdateProvider;
import tk.mybatis.mapper.annotation.RegisterMapper;RegisterMapper
public interface BatchUpdateMapperT {UpdateProvider(type BatchUpdateProvider.class,method dynamicSQL)void batchUpdate(Param(list) List? extends T recordList);
}
package tk.mybatis.mapper.additional.update.batch;import org.apache.ibatis.mapping.MappedStatement;
import tk.mybatis.mapper.mapperhelper.MapperHelper;
import tk.mybatis.mapper.mapperhelper.MapperTemplate;
import tk.mybatis.mapper.mapperhelper.SqlHelper;public class BatchUpdateProvider extends MapperTemplate {public BatchUpdateProvider(Class? mapperClass, MapperHelper mapperHelper) {super(mapperClass, mapperHelper);}public String batchUpdate(MappedStatement ms) {Class? entityClass this.getEntityClass(ms);StringBuilder sql new StringBuilder();sql.append(foreach collection\list\ item\record\ separator\;\ );sql.append(SqlHelper.updateTable(entityClass, this.tableName(entityClass)));sql.append(SqlHelper.updateSetColumns(entityClass, record, false, false));sql.append(SqlHelper.wherePKColumns(entityClass, record, true));sql.append(/foreach);return sql.toString();}public String batchUpdateSelective(MappedStatement ms) {Class? entityClass this.getEntityClass(ms);StringBuilder sql new StringBuilder();sql.append(foreach collection\list\ item\record\ separator\;\ );sql.append(SqlHelper.updateTable(entityClass, this.tableName(entityClass)));sql.append(SqlHelper.updateSetColumns(entityClass, record, true, this.isNotEmpty()));sql.append(SqlHelper.wherePKColumns(entityClass, record, true));sql.append(/foreach);return sql.toString();}
}
项目细节
我们通常在自己的项目都要所有的mapper都是继承我们自定义的BaseMapper这里我也给上我常用的后续要扩展功能只要在BaseMapper上扩展即可
import tk.mybatis.mapper.additional.idlist.IdListMapper;
import tk.mybatis.mapper.additional.update.batch.BatchUpdateMapper;
import tk.mybatis.mapper.annotation.RegisterMapper;
import tk.mybatis.mapper.common.IdsMapper;
import tk.mybatis.mapper.common.Mapper;
import tk.mybatis.mapper.common.special.InsertListMapper;/*** BaseMapper* TIP:basePackage的属性值 不能包含通用mapper所在的包,所以不能放在./mapper下启动会报错** param T*/
RegisterMapper
public interface BaseMapperT extends MapperT, IdListMapperT, Long, IdsMapperT, InsertListMapperT, BatchUpdateMapperT {}
小结
希望能够帮到你总之我知道要实现的什么功能最好去看看作者的作品