Spring中究竟应该使用@Repository还是@Mapper?

使用注解开发Dao(Mapper)层的时候,常常会不知道应该如何选择这两个注解。


1 - @Repository

@Repository是属于Spring的注解,它与@Service、@Controller都可以理解为扩展的@Component注解。它们的作用都是在类上实例化bean,即把当前类对象的实现类交给Spring容器进行管理

@Repository注解的等效替换:

@Component("userDao")
//等效替换
@Repository("userDao")
//等效替换

如果我们不用@Repository来注解接口,我们可以使用其他方法注入这个接口的实现类?

方法一:在spring的配置文件中配置了MapperScannerConfigurer这个bean,它会扫描持久层接口创建实现类交给spring进行管理。

方法二:接口上使用了@Mapper注解。

方法三:springboot的启动类上使用了@MapperScan注解,和MapperScannerConfigurer作用一样。

注:以上方法在进行自动装配的时候,如果不使用@Repository注解,idea会报警告,提示找不到这个bean,可以直接忽略(不影响程序运行)。

2 - @Mapper

@Mapper是属于Mybatis的注解,在程序中,Mybatis需要找到对应的mapper,在编译的时候动态生成代理类,实现数据库查询功能。

@Mapper与@Repository注解的使用方式完全一样,但是如果只是单独的使用@Mapper注解会出现上面提到过的警告问题,在自动装配时如果出现警告可以同时使用@Repository注解。上方的方法一与方法三也可以替代@Mapper注解。

@Repository
@Mapper
public interface BookDao {
    //具体代码省略
}

3 - 总结

1.@Repository是Spring的注解,@Mapper是Mybatis的注解。

2.@RepoSitory与@Mapper都可以使用,二者可以同时出现也可以单一使用。

3.单独使用@Repository时,需要使用扫描(MapperScannerConfigurer或@MapperScan)。

4.单独使用@Mapper时,可能会出现警告,配合@Repository可以消除警告。

你可能感兴趣的:(spring,spring,boot,java,spring)