整点活,MyBatis-Plus学习笔记(SQL注入器)

前言

最后一章辣!!!jiajiajiajiajiajai
这个是自己学习时候记得笔记要是想详细了解可以去MP官网,上边有更详细的配置流程以及视频教学:MyBatis-Plus

概念

Mp的BaseMapper提供了很多方法,但这些方法可能不够使用,所以可以创建自定义方法

步骤

  1. 新建类 extends AbstractMethod
    实现injectMappedStatement方法,在这个方法中自定义执行接口
public class DeleteAllMethod extends AbstractMethod {
    @Override
    public MappedStatement injectMappedStatement(Class<?> mapperClass, Class<?> modelClass, TableInfo tableInfo) {
        // 自定义方法
        // 1. 自定义sql语句
        String sql = "delete from "+tableInfo.getTableName();
        // 2. 定义在Mapper接口中方法名
        String methodName = "deleteAll";
        // 3. 创建sql源
        SqlSource sqlSource = languageDriver.createSqlSource(configuration,sql,modelClass);
        // 4. 返回方法
        return addDeleteMappedStatement(mapperClass,methodName,sqlSource);
    }
}

  1. 创建SQL注入器 extends Default
@Component
public class MySQLInjector extends DefaultSqlInjector {

    @Override
    public List<AbstractMethod> getMethodList(Class<?> mapperClass) {
        // 1. 获取父级创建的方法
        List<AbstractMethod> methodList = super.getMethodList(mapperClass);
        // 2. 将自定义方法放到列表中
        methodList.add(new DeleteAllMethod());
        // 3. 返回
        return methodList;
    }
}

  1. 在对应的Mapper中创建该方法
    /**
     * 删除所有
     * @return 影响行数
     */
    int deleteAll();
  1. 进行调用
    public void deleteAll(){
        System.out.println("影响行数: "+typeMapper.deleteAll());
    }

执行结果(执行删除而不是逻辑删除)
由于是自定义删除

提出问题

(以删除为例子)如果要删除一个表中的数据可以这样解决,但是要删除多个表中数据时,还需要在每一个对应的操作包下都进行这些操作么?

解决问题

此时使用自定义Mapper即可

  1. 创建MyMapper< T > 继承BaseMapper,将自定义方法放到MyMapper里边
public interface MyMapper<T> extends BaseMapper<T> {
    /**
     * 删除所有
     * @return 影响行数
     */
    int deleteAll();
}
  1. 创建实际操作对象的Mapper继承MyMapper
public interface MyTypeMapper extends MyMapper<Type> {

}

3. 这时候继承MyMapper的Mapper都会获得自己的 deleteAll()方法

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值