Mybatis-plus自定義Sql注入器


最近在學習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注入器。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM