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

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


1 - @Repository

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

@Repository注解的等效替换:

@Component("userDao")
//等效替换
@Repository("userDao")
//等效替换
<bean id="userDao" class="com.cdxy.dao.impl.UserDaoImpl"></bean>

如果我们不用@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可以消除警告。

  • 6
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
### 回答1: @repository注解和@mapper都是Spring框架注解,用于标识类的作用。 @repository注解用于标识数据访问(DAO)的类,表示该类是用于访问数据库的。在Spring使用@Repository注解标识的类会被自动扫描并注册为Bean,可以通过@Autowired注解进行注入。 @mapper注解用于标识MyBatis的Mapper接口,表示该接口是用于访问数据库的。在MyBatis使用@Mapper注解标识的接口会被自动扫描并注册为Mapper,可以通过@Autowired注解进行注入。 总的来说,@repository注解和@mapper注解都是用于标识访问数据库的类或接口,方便Spring和MyBatis进行自动扫描和注册。 ### 回答2: @repository注解和@mapper都是Spring框架非常重要的注解。 首先说@repository注解。它是Spring框架的一种注解,用于标识一个类为数据访问对象,即DAO。DAO是指封装了数据访问逻辑的类,如对数据库进行增、删、改、查等操作的类。通过在DAO类上添加@repository注解Spring容器会实例化此类对象,并将其纳入到IOC容器,使得我们可以在其他类直接使用该对象。 其次说@mapper注解。它是MyBatis框架的一种注解,用于标识一个Mapper接口的实现类。Mapper接口是MyBatis用于描述SQL映射文件的接口,通过在Mapper接口的方法上添加@mapper注解,MyBatis会自动为该接口生成一个代理类,从而实现了对SQL语句的封装和执行。与@Repository注解不同的是,@mapper注解主要是用于MyBatis框架。MyBatis框架在使用@mapper注解时,也会将标记有@mapper注解Mapper实例化并纳入到IOC容器,使得我们可以在其他类直接使用该对象。 综上所述,@repository注解和@mapper注解都是非常重要的注解,它们分别用于标识Spring框架的DAO类和MyBatis框架Mapper接口的实现类。通过使用这两个注解,我们可以将这些对象自动地纳入Spring的IOC容器,从而实现依赖注入和自动装配等功能。 ### 回答3: @repository注解和@mapper注解Spring框架和Mybatis框架常用的两个注解。它们的功能不同,但都与持久相关。 @repository注解Spring框架用于标识持久Bean的注解。在Spring,持久Bean一般是指Dao,即数据访问使用@Repository注解标识的类时可以自动扫描并装载到Spring容器。@repository注解除了能够标识持久Bean之外,还具有异常转译的功能,即将持久抛出的异常转换成Spring统一的数据访问异常。这样做的好处在于,当产生异常时,我们只需要捕获Spring的DataAccessException,而不需要关心底持久所抛出的异常类型。这样使得代码更加规范和简洁。 @mapper注解则是Mybatis框架注解,用于指定一个Mapper接口。Mapper接口是指一组操作数据库的Java接口,它们为每个SQL语句提供了一组相应的方法。使用@mapper注解标识的接口时可以自动扫描并装载到Mybatis的mapper映射文件。在Mybatis,@mapper注解mapper.xml配置文件是对应的。当我们调用Mapper接口的方法时,Mybatis会自动找到对应的mapper.xml文件,调用其的SQL语句进行数据操作。使用@mapper注解的好处在于,避免了手写SQL语句的繁琐和低效,让代码更加简洁易懂。 综上所述,@repository注解和@mapper注解都是与持久相关的注解,但各自的功能不同。@repository注解Spring框架标识持久Bean的注解,提供了异常转译的功能;@mapper注解则是Mybatis框架标识Mapper接口的注解,提供了简化SQL操作的功能。这两个注解使用可以提高代码的编写效率和规范性,减少出错的可能性。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值