Mybatis-plus自定义Sql注入器
阅读原文时间:2023年09月05日阅读:1

最近在学习mybatis-plus,知道了在mp中通过AbstractSqlInjector将BaseMapper中的方法注入到了Mybatis容器,这样这些方法才可以正常执行。

下面是一个关系图

那么,我们需要扩充BaseMapper的方法,也就是说基本的方法满足不了我们了,需要怎么做呢?

1.编写一个MyBaseMapper继承BaseMapper,其他的mapper可以继承这个MyBasemapper,这样就可以实现统一的扩展。

public interface MyBaseMapper<T> extends BaseMapper<T> {

    User findById(Long id);

    List<User> findAll();

    //下面还可以扩展其他的方法...

}

2.编写一个MySqlInjector,继承DefaultSqlInjector来进行扩展。

public class MySqlInjector extends DefaultSqlInjector {
    @Override
    public List<AbstractMethod> getMethodList(Class<?> mapperClass, TableInfo tableInfo) {

        List<AbstractMethod> list = new ArrayList<>();

        //获取父类中的集合
        list.addAll(super.getMethodList(mapperClass,tableInfo));
        //自定义的方法
        list.add(new FindAll());
        return list;
    }
}

3.编写自定义的方法。

public class FindAll extends AbstractMethod {

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

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

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

        return this.addSelectMappedStatementForTable(mapperClass,
                "findAll", sqlSource, tableInfo);
    }
}
}

4.将MySqlInjector注入到spring中去。

@Configuration
public class MybatisPlusConfig {

    @Bean   //sql注入
    public MySqlInjector mySqlInjector(){
        return new MySqlInjector();
    }
}

这样我们就完成了一个全局扩展的sql注入器。