之前一直用Mapper,后来项目中用MapperScan, 再后来一不小心两个一起用了,就出现问题了,本文讲解两个注解的作用和优先级。
1、@Mapper 作用
用在接口类上,在编译之后会生成相应的接口实现类
位置:对应的某个接口类上面 如果每个接口类 都要
@Mapper 注解,是重复而无聊的工作,解决这个问题用 @MapperScan 。
2、@MapperScan 作用
扫描指定包下所有的接口类,然后所有接口在编译之后都会生成相应的实现类
位置:是在 SpringBootApplication 启动类上面添加 。
@MapperScan 是对整个包下的所有的接口类的注解。是批量的操作。使用 @MapperScan 后,接口类 就不需要使用 @Mapper 注解。
3、各种场景
1、只使用@Mapper注解,不使用@MapperScan注解。会扫描@Mapper注解所在接口,生成动态代理类,注入到Spring容器中。
2、只使用@MapperScan注解,不使用@Mapper注解。会扫描@MapperScan注解配置的包下面的接口生成动态代理类,注入到Spring容器中。
3、@Mapper、@MapperScan注解都使用,@Mapper接口,在@MapperScan注解中有配置包路径,那么可以正常使用。
4、@Mapper、@MapperScan注解都使用,@Mapper接口,在@MapperScan注解中没有配置包路径,那么会报错,解决办法,就是在@MapperScan注解中配置正确路径下的包即可。
第四种场景是比较容易出错的。这个具体原因我还是不是很清楚,表面上暂时理解为@MapperScan的优先级高于@Mapper, 有了@MapperScan后,@Mapper就不生效了,后面我深入分析源码看下。
标签:Mapper,区别,接口,MapperScan,使用,注解,接口类 From: https://www.cnblogs.com/hungryquiter/p/16980937.html