@mapper和@repository的使用

今天做一个springBoot项目,dao层中用到了mapper注解,突然想到另一个注解repository,二者都是可以将接口类注册为bean并被扫描到spring容器中,于是我把mapper改成repository,但是报错了。
我一直理解的是,componentscan+repository=mapper,springBoot约定大于配置,自动带有component注解,不应该报错呀。
是少了什么步骤吗,还是我理解错了?
求大伙解惑

你的理解有一些偏差。虽然@Mapper@Repository注解有相似之处,但是它们的作用是不同的。
@Mapper注解是用来标识MyBatis的Mapper接口的,它是MyBatis框架中用于实现DAO层的核心注解。
@Repository注解则是Spring框架中用于标识DAO层的注解,它实际上是对@Component注解的细化,表明该类是用来完成数据访问的。
虽然@Repository注解可以被扫描到Spring容器中,但它并不能像@Mapper注解一样与MyBatis框架一同工作。如果你想在MyBatis中使用这个接口,你需要使用@Mapper注解或者在MyBatis的配置文件中手动指定这个接口的映射。
因此,你应该在使用@Mapper注解而不是@Repository注解来标识MyBatis的Mapper接口。

那么你也可以使用使用@Repository注解和JPA可以方便地实现数据的增删改操作。在使用JPA时,你可以使用CrudRepository接口提供的基本数据访问操作,也可以使用JpaRepository接口提供的更丰富的数据访问操作。
首先,定义一个使用@Repository注解标识的JpaRepository实现类,如下所示:

@Repository
public interface UserRepository extends JpaRepository<User, Long> {

}