通用mapper——功能拓展

前提

通用mapper——自定义搭配继承Mapper

正文

通过查阅官方文档,发现并没有通过id批量修改和删除的mapper,现在扩展通过id批量修改和删除的mapper

使用的基础方法

实体类来源方法名参数返回值作用
MapperTemplatexxProvider继承getEntityClassMappedStatement msClass<?>获取返回值类型 - 实体类型
MapperTemplatexxProvider继承tableNameClass<?> entityClassString获取实体类的表名
SqlHelpertk.mybatis.mapper.mapperhelperupdateTableClass<?> entityClass, String defaultTableNameString返回 UPDATE tableName 的语句
EntityHelpertk.mybatis.mapper.mapperhelpergetColumnsClass<?> entityClassSet<EntityColumn>获取实体类全部的列
EntityColumntk.mybatis.mapper.entitygetColumnString获取字段的名称
EntityColumntk.mybatis.mapper.entitygetColumnHolderString entityNameString获取如#{entityName.age,jdbcType=NUMERIC}
EntityColumntk.mybatis.mapper.entityisIdboolean判断该字段是不是主键字段

扩展通用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>{
}

使用批量操作需要在spring.datasource.url上添加参数allowMultiQueries=true

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值