SpringBoot中Mapper注解

    在用idea写一个实现类时引用了mapper类的来调用dao层的处理,使用@Autowired注解时被标红线,找不到bean。

    解决办法:在mapper的dao层加@mapper或者@repository注解。

    这两种注解的区别在于:

    1、使用@mapper后,不需要在spring配置中设置扫描地址,通过mapper.xml里面的namespace属性对应相关的mapper类,spring将动态的生成Bean后注入到ServiceImpl中。

    2、@repository则需要在Spring中配置扫描包地址,然后生成dao层的bean,之后被注入到ServiceImpl中

Spring在扫描注解时,取消了扫描抽象类和接口,所以无法找到你用@reponsitory注解的dao接口。如果在idea中使用@Mapper注解,在@Autowired时,idea会提示找不到bean,但是不影响运行。但是我看着又难受,百度一堆规避的方法,包括设置改为warning等,后来发现一个骚操作,可以把两个注解同时使用,这样,@Mapper可以让你找到bean,@reponsitory可以帮你治疗强迫症。

Mapper只是用来扫描用的,当然你可以去掉,在springboot的启动类上@MapperScan(basePackages = {"com.xxx.xxx"})来扫描

@Mappler是mybatis注解,mybatis运行时需要能找到到mapper文件,然后运行时构建代理类来完成功能,和Spring没有关系。你应该用@MapperScan来扫描mapper接口,让mybatis能找倒这些接口。然后Spring的@ComponetScan也要扫描这些接口,这样Spring才能管理这些mybatis生成的代理类。 @Repository是Spring的注解,而且注解放在接口上也没用也没有意义。

springboot是一个简化的spring框架,他默认配置了很多框架的使用方法和参数用来简化spring的应用的搭建和开发过程从而是开发人员不需要在使用样板化的配置

猜你喜欢

转载自blog.csdn.net/qq_52915133/article/details/119215701