mybatis-plus的sql注入器实现自定义全局sql操作原理解析

自定义自己的通用方法可以实现接口ISqlInjector,也可以继承抽象类 AbstractSqlInjector。注入通用方法 SQL 语句,然后继承 BaseMappe添加自定义方法,全局配置sqlInjector 注入 MP会自动将类所有方法注入到 mybatis 容器中。

比如说我想在全局添加一个逻辑删除方法,我不希望给每个Mapper添加这个方法,而是希望像BaseMapper这样,给每一个Mapper自动添加一个,怎么做呢?

这样就可以将之前需要在每个mapper xml中配置的sql语句,现在通过扩展ISqlInjector在spring启动时,加载mybatis-plus时就注入了

其流程就是在我们之前的spring启动时mybatis-plus注入sql源码解析中的GlobalConfig中默认加载的AbstractSqlInjector是DefaultSqlInjector,我们现在在applicationContext.xml中配置GlobalConfig,指定加载的SqlInjector为我们自定义的MySqlInjector

<bean id="sqlSessionFactory" class="com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean">

    <property name="dataSource" ref="dataSource" />

    <property name="globalConfig" ref="globalConfig"/>
......

<!-- 定义自定义注入器 -->

<bean id="mySqlInjector" class="com.hfi.injector.MySqlInjector"></bean>



<bean id="globalConfig" class="com.baomidou.mybatisplus.core.config.GlobalConfig">

    <property name="sqlInjector" ref="mySqlInjector"/>

</bean>

配置参考文档:

https://mp.baomidou.com/config/

在这个过程中,由于使用了我们的MySqlInjector

public class MySqlInjector extends DefaultSqlInjector {

    @Override

    public List<AbstractMethod> getMethodList() {

        List<AbstractMethod> methodList = super.getMethodList();

        // 添加自定义方法

        methodList.add(new DeleteAll());

        return methodList;

    }

}

在getMethodList的时候,就添加了我们自定义的全局sql

在后面一个一个injectMappedStatement的时候,就会到我们的DeleteAll()方法中

public class DeleteAll extends AbstractMethod {

    @Override

    public MappedStatement injectMappedStatement(Class<?> mapperClass, Class<?> modelClass, TableInfo tableInfo) {

        /* 执行 SQL ,动态 SQL 参考类 SqlMethod */

        String sql = "delete from " + tableInfo.getTableName();

        /* mapper 接口方法名一致 */

        String method = "deleteAll";

        SqlSource sqlSource = languageDriver.createSqlSource(configuration, sql, modelClass);

        return this.addDeleteMappedStatement(mapperClass, method, sqlSource);

    }

}

后面的流程是一样的,于是就加入到了mybatis Configuration中的MappedStatements中

 

自定义全局操作里面有一个应用,就是逻辑删除

源码参考:https://gitee.com/constfafa/mybatis-plus-spring-demo

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值