前提
正文
通过查阅官方文档,发现并没有通过id批量修改和删除的mapper,现在扩展通过id批量修改和删除的mapper
使用的基础方法
实体类 | 来源 | 方法名 | 参数 | 返回值 | 作用 |
---|---|---|---|---|---|
MapperTemplate | xxProvider继承 | getEntityClass | MappedStatement ms | Class<?> | 获取返回值类型 - 实体类型 |
MapperTemplate | xxProvider继承 | tableName | Class<?> entityClass | String | 获取实体类的表名 |
SqlHelper | tk.mybatis.mapper.mapperhelper | updateTable | Class<?> entityClass, String defaultTableName | String | 返回 UPDATE tableName 的语句 |
EntityHelper | tk.mybatis.mapper.mapperhelper | getColumns | Class<?> entityClass | Set<EntityColumn> | 获取实体类全部的列 |
EntityColumn | tk.mybatis.mapper.entity | getColumn | String | 获取字段的名称 | |
EntityColumn | tk.mybatis.mapper.entity | getColumnHolder | String entityName | String | 获取如#{entityName.age,jdbcType=NUMERIC} |
EntityColumn | tk.mybatis.mapper.entity | isId | boolean | 判断该字段是不是主键字段 |
扩展通用mapper——批量修改
1. 创建批量修改的Mapper接口
import org.apache.ibatis.annotations.UpdateProvider;
import tk.mybatis.mapper.annotation.RegisterMapper;
import java.util.List;
/**
* 扩展通用mapper——批量修改
*
* @author √Angelの爱灬
* @date 2022/4/16
*/
@RegisterMapper
public interface UpdateListMapper<T> {
/**
* 通过主键批量修改
*
* @param recordList 需要修改的数据集
*/
@UpdateProvider(type = UpdateListMapperProvider.class, method = "dynamicSQL")
void updateListByPrimaryKey(List<? extends T> recordList);
}
2. 创建接口对应的Provider类,不是实现类
import org.apache.ibatis.mapping.MappedStatement;
import tk.mybatis.mapper.mapperhelper.MapperHelper;
import tk.mybatis.mapper.mapperhelper.MapperTemplate;
import tk.mybatis.mapper.mapperhelper.SqlHelper;
/**
* 扩展通用mapper——批量修改Provider
*
* @author √Angelの爱灬
* @date 2022/4/16
*/
public class UpdateListMapperProvider extends MapperTemplate {
public UpdateListMapperProvider(Class<?> mapperClass, MapperHelper mapperHelper) {
super(mapperClass, mapperHelper);
}
public String updateListByPrimaryKey(MappedStatement ms) {
// 获取实体类
final Class<?> entityClass = getEntityClass(ms);
// 获取实体类的表名
String tableName = tableName(entityClass);
// 开始拼sql
return "<foreach collection=\"list\" item=\"record\">" +
// 拼接 UPDATE `tableName` 部分
SqlHelper.updateTable(entityClass, tableName) +
// 拼接 SET 部分
SqlHelper.updateSetColumns(entityClass, "record", true, isNotEmpty()) +
// 拼接 WHERE 子句
SqlHelper.wherePKColumns(entityClass, "record", true) + ";" +
"</foreach>";
}
}
3. 继承扩展接口
import tk.mybatis.mapper.annotation.RegisterMapper;
import tk.mybatis.mapper.common.Mapper;
import tk.mybatis.mapper.common.special.InsertListMapper;
/**
* 自定义的通用mapper
* 除了集成基本的增删改查以外,还集成了批量添加,通过id集合批量删除、批量查询、批量修改
*
* @author √Angelの爱灬
* @date 2022/4/16
*/
@RegisterMapper
public interface AllMapper<T> extends Mapper<T>, InsertListMapper<T>, UpdateListMapper<T>{
}