@Mapper,@MapperScan与@Repository区别
從mybatis3.4.0開始加入了@Mapper注解,它可以在編譯之后自動(dòng)生成相應(yīng)的接口實(shí)現(xiàn)類,不用再寫如下圖所示的mapper映射文件。
用@Mapper直接在接口中寫 ,編譯時(shí)自動(dòng)生成實(shí)現(xiàn)類,具體寫法見下圖。
如果需要讓多個(gè)接口都變成實(shí)現(xiàn)類,用@Mapper一個(gè)個(gè)添加太麻煩,這時(shí)我們?cè)赟pringboot啟動(dòng)類添加@MapperScan,指定要掃描的mapper的包的路徑,然后包下面的所有接口在編譯之后都會(huì)生成相應(yīng)的實(shí)現(xiàn)類,實(shí)現(xiàn)批量添加@Mapper注解。
根據(jù)百度結(jié)果,@Mapper = @MapperScan(自動(dòng)掃描配置)+Repository,單獨(dú)有Mapper的時(shí)候,Autowired會(huì)報(bào)錯(cuò),但可以運(yùn)行。
簡(jiǎn)而言之,批量用@MapperScan,單個(gè)@Mapper。
注:
@MapperScan用來(lái)掃描定義包下的所有的接口,給接口都生成一個(gè)bean(經(jīng)測(cè)試,即便bean已經(jīng)存在,@MapperScan還是會(huì)將這些接口再注冊(cè)一個(gè)bean,導(dǎo)致出錯(cuò))。
其源碼里有個(gè)annotationClass,默認(rèn)值是Annotation.classs。
Class<? extends Annotation> annotationClass() default Annotation.class;?注解如下所示加個(gè)參數(shù),就能解決上面的問(wèn)題。
@MapperScan(basePackages = "com.zhi.test", annotationClass = Mapper.class)? 經(jīng)驗(yàn)證,一些無(wú)關(guān)的接口不再注冊(cè)為一個(gè)bean。
(——引自關(guān)于MyBatis的@Mapper和@MapperScan注解的一點(diǎn)思考 - 玄同太子 - 博客園)
總結(jié)
以上是生活随笔為你收集整理的@Mapper,@MapperScan与@Repository区别的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 针对零基础的UE开发(05)
- 下一篇: Expected more than 1