@Mapper注解详解

原文地址:http://www.tianshouzhi.com/api/tutorials/mapstruct/292

在上一节中,我们已经看到了MapStruct可以帮助我们自动根据一个添加@Mapper注解的接口生成一个实现类,在上一节的案例中,自动生成的是CarMapperImpl.class,而且我们也已经通过IDE的反编译功能查看了其源码。

本节我们将会对@Mapper注解进行一些讲解。

1、@Mapper注解的componentModel属性

componentModel属性用于指定自动生成的接口实现类的组件类型。这个属性支持四个值:

default: 这是默认的情况,mapstruct不使用任何组件类型, 可以通过Mappers.getMapper(Class)方式获取自动生成的实例对象。

cdi: the generated mapper is an application-scoped CDI bean and can be retrieved via @Inject

spring: 生成的实现类上面会自动添加一个@Component注解,可以通过Spring的 @Autowired方式进行注入

jsr330: 生成的实现类上会添加@javax.inject.Named 和@Singleton注解,可以通过 @Inject注解获取。


我们以spring组件方式进行验证,将上一节的CarMapper接口上@Mapper注解添加componentModel属性,如下:

//设置组件模型为Spring
@Mapper(componentModel = "spring")
public interface CarMapper {
 
    CarMapper INSTANCE = Mappers.getMapper( CarMapper.class );
 
    @Mapping(source = "numberOfSeats", target = "seatCount")
    CarDto carToCarDto(Car car);
}

需要注意的是,当指定组件模型为Spring的时候,我们在classpath下一定要引入spring的jar包,否则MapStruct在编译的时候会报错。

现在再次执行"mvn compile",通过IDE反编译功能查看自动生成的Mapper实现类源码。

QQ截图20160610212311.png

可以看到自动生成的实现类中,自动帮我们添加了@Component注解。因此我们在其他地方可以通过@AutoWired的方式自动注入。


mapperScan注解mapper注解是MyBatis框架中的两种注解,它们的作用略有不同。 mapperScan注解用于在启动类上添加,通过指定Mapper类的包路径进行扫描,从而将mapper层中的接口自动注入为bean,无需再在每个mapper接口上添加@Mapper注解。 这样做可以简化开发过程,减少代码冗余。 而mapper注解则是用于在mapper接口上添加的注解,通过xml文件的namespace命名空间自动注入bean,需要在每个mapper接口上添加@Mapper注解。这种方式相对较繁琐,需要手动为每个mapper接口添加注解。 总结来说,mapperScan注解是用于自动扫描mapper接口并将其注入为bean的,而mapper注解是用于手动标注mapper接口的。它们的使用方式和效果有所区别,开发者可以根据自己的需求选择适合的注解。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [MapperScan注解和@Mapper的区别,怎么用](https://blog.csdn.net/weixin_46310452/article/details/112682728)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *3* [详解 @MapperScan 注解和 @Mapper 注解](https://blog.csdn.net/jialiguo/article/details/100019472)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值