@MapperScan:
1.首先了解@Mapper
在接口上添加了@Mapper,在編譯之后就會生成相應的接口實現類。
不過需要在每個接口上面進行配置,為了簡化開發,就有了 @MapperScan。
@MapperScan:
指定要變成實現類的接口所在的包,然后包下面的所有接口在編譯之后都會生成相應的實現類。
@ComponentScan:
會自動掃描包路徑下面的所有@Controller、@Service、@Repository、@Component 的類,並把符合掃描規則的類裝配到spring容器中。
@MapperScan和@ComponentScan可以同時使用。
如果都是掃描的相同路徑時,對於同一個接口,可能就會出現識別錯誤。比如
在springBoot項目的Application上面定義了
@MapperScan(basePackages = { "com" })
@SpringBootApplication
@SpringBootApplication包含了@ComponentScan。
在此項目下面有一個接口是com.xxInf,實現是com.xxImpl在實現類上面通過@Service加入spring容器中
我們在注入的時候接口時
@Autowired
private com.xxInf xx;
可能識別的不是xxImpl,而去mybatis里面通過反射找綁定,這樣就會出現BindingException錯誤
org.apache.ibatis.binding.BindingException: Invalid bound statement (not found)
所以在設計項目結構的時候要把mapper放到一個合適的位置,通過設置MapperScan的路徑basePackages 好避免這種沖突