最近在学习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注入器。
手机扫一扫
移动阅读更方便
你可能感兴趣的文章