MyBatisPlus实现实体类注入枚举类型字段

2022-08-24 11:37:32

为了加强实体类中,特殊字段类型的可读性和省去数据类型的转换,我们今天尝试把Int类型,例如状态这种整型字段换做枚举, 下面是旧代码

@Data@EqualsAndHashCode(callSuper=false)@Accessors(chain=true)@TableName("gdt_targeting")@ApiModel(value="Targeting对象", description="定向数据")publicclassTargetingextendsBaseEntity{@ApiModelProperty(value="主键")@TableId(value="id", type= IdType.ID_WORKER)private Long id;@ApiModelProperty(value="定向ID")@TableField("targeting_id")private Long targetingId;@ApiModelProperty(value="定向名称")@TableField("targeting_name")private String targetingName;@ApiModelProperty(value="定向所属广告主账号ID")@TableField("account_id")private Long accountId;@ApiModelProperty(value="定向保存类型, 0: 平台引用,1: 平台新建")@TableField("targeting_type")private Integer targetingType;@ApiModelProperty(value="是否撤销:0-正常 1-撤销")@TableField("is_deleted")@TableLogicprivate Integer deleted;@ApiModelProperty(value="广点通状态:0-失败 1-成功")@TableField("gdt_status")private Integer gdtStatus;}

下面我们只需要配置下文件就行了

yml 文件类型

mybatis-plus:typeEnumsPackage: com.xxx.enums

properties 文件类型

mybatis-plus.type-enums-package=com.xxx.enums

下面我们要对gdtStatus 参数进行转换,下面是相关的枚举类型,@EnumValue必须带上

/**
 * 广点通状态枚举
 */@Getter@AllArgsConstructorpublicenum GdtStatusEnum{INIT(0),SUCCESS(1),FAIL(2);@EnumValueprivate Integer status;}

实体类也更新一下

@ApiModelProperty(value="广点通状态")@TableField("gdt_status")private GdtStatusEnum gdtStatus;

下面我们会提供业务实现

publicinterfaceITargetingServiceextendsIService<Targeting>{/**
	 * 保存定向
	 * @param batchCreate 请求参数
	 * @param batchId 批次id
	 * @return boolean
	 */
	BooleanaddTargeting(TencentadBatchCreate batchCreate, Long batchId);}
@ServicepublicclassTargetingServiceImplextendsServiceImpl<TargetingMapper, Targeting>implementsITargetingService{@Overridepublic BooleanaddTargeting(TencentadBatchCreate batchCreate, Long batchId){
		TencentadLineItemCondition lineItemTargeting= batchCreate.getLineitem().getCondition();
		Long accountId= batchCreate.getAccountId();
		Targeting targeting;if(lineItemTargeting.getTargetingId()!= null){
			QueryWrapper queryWrapper=newQueryWrapper();
			queryWrapper.select("id");
			queryWrapper.eq("batch_id", batchId);
			targeting=getOne(queryWrapper);if(targeting== null){
				targeting=newTargeting();
				targeting.setAccountId(accountId);
				targeting.setTargetingId(lineItemTargeting.getTargetingId());
				targeting.setGdtStatus(GdtStatusEnum.INIT);
				targeting.setBatchId(batchId);save(targeting);}returntrue;}else{// todo invoke maketing targetings/add}returnfalse;}}

下面是测试代码

publicclassAddTergetingTestextendsBaseTest{@Autowiredprivate ITargetingService targetingService;@TestpublicvoidaddTargetingSuccessful(){
		TencentadBatchCreate batchCreate=newTencentadBatchCreate();
		TencentadLineItem lineItem=newTencentadLineItem();
		batchCreate.setLineitem(lineItem);
		batchCreate.setAccountId(accountId);

		TencentadLineItemCondition targeting=newTencentadLineItemCondition();
		targeting.setTargetingId(1L);
		lineItem.setCondition(targeting);
		Boolean flag= targetingService.addTargeting(batchCreate,1L);assert flag;
		QueryWrapper<Targeting> queryWrapper=newQueryWrapper();
		queryWrapper.select("id");
		queryWrapper.eq("batch_id",1L);
		Targeting entity= targetingService.getOne(queryWrapper);assert entity!= null;}}

执行后的结果
在这里插入图片描述

  • 作者:aka这里是你的程序员
  • 原文链接:https://blog.csdn.net/Fyf_010316/article/details/110005384
    更新时间:2022-08-24 11:37:32