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