自定义自己的通用方法可以实现接口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

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐