例如tk.mybatis.mapper.common.base.select.SelectMapper接口的方法:
@SelectProvider(type = BaseSelectProvider.class, method = "dynamicSQL")
List<T> select(T record);
原理:
这里使用BaseSelectProvider,指定的方法dynamicSQL只是为了初始时符合ProviderSqlSource的要求,但其实并不会真实调用。tk.mybatis会对所有的Mapper接口进行扫描封装,统一用MapperFactoryBean进行封装返回。而MapperFactoryBean类则又实现了InitializingBean接口,会在bean创建成功并且所有属性都注入后,将调用afterPropertiesSet()方法,在此方法里将对之前使用@SelectProvider注解并且方法提供者是MapperTemplate子类的方法,进行将ProviderSqlSource替换为DynamicSqlSource(或者是其他SqlSource实现类),从而在后续真正执行数据库操作方法时使用替换后的SqlSource。