一、单测
test采用juint5
pom如下:
<!-- lombok -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<!-- https://mvnrepository.com/artifact/org.mockito/mockito-junit-jupiter -->
<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-junit-jupiter</artifactId>
<version>3.9.0</version>
<scope>test</scope>
</dependency>
<!-- https://mvnrepository.com/artifact/org.junit.jupiter/junit-jupiter-engine -->
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-engine</artifactId>
<version>5.7.1</version>
<scope>test</scope>
</dependency>
常见使用
1、mock mapper文件
@Resource
private GoodsService goodsService;
@MockBean
private GoodsMapper goodsMapper;
@Test
void deleteGoodsServiceBySku() throws Exception {
GoodsDO goodsDO = new GoodsDO();
goodsDO.setId(1L);
Mockito.when(goodsMapper.selectByPrimaryKey(Mockito.anyLong())).thenReturn(goodsDO);
goodsService.deleteServiceBySku(1L);
}
2、公共返回值定义
@BeforeEach
void set() {
goodsDO = new GoodsDO();
goodsDO.setId(1L);
}
3、异常断言
try {
goodsService.updateService(Dos);
} catch (Exception e) {
assertThat(e).isInstanceOf(GoodsException.class).hasMessage(ExceptionEnum.CONFLICT.getDesc());
}
4、不同情况
try {
AssetService.search(assetSearchDTO);
} catch (Exception e) {
log.info("e", e.getMessage());
}
assetSearchDTO.setSearchType(2);
try {
AssetService.search(assetSearchDTO);
} catch (Exception e) {
log.info("e", e.getMessage());
}
assetSearchDTO.setSearchType(3);
try {
AssetService.search(assetSearchDTO);
} catch (Exception e) {
log.info("e", e.getMessage());
}
assetSearchDTO.setSearchType(4);
try {
AssetService.search(assetSearchDTO);
} catch (Exception e) {
log.info("e", e.getMessage());
}
二、mapStruct
1、DTO中返回枚举类型
问题:直接将枚举类反馈给前端,具体取对应数值还是文字上一层在做处理(这里do到dto的转换用的是mapStruct)
返回的数据类型如下:
@Data
public class OrderDTO implements Serializable {
private static final long serialVersionUID = -1625092515960632463L;
private OrderEnum source;
private Integer num;
}
解决:枚举类中添加自定义方法,mapStruct中通过映射做转换
mapStruct依赖
<!-- MapStruct -->
<dependency>
<groupId>org.mapstruct</groupId>
<artifactId>mapstruct</artifactId>
<version>1.4.2.Final</version>
</dependency>
<dependency>
<groupId>org.mapstruct</groupId>
<artifactId>mapstruct-processor</artifactId>
<version>1.4.2.Final</version>
<optional>true</optional>
</dependency>
@Getter
@AllArgsConstructor
public enum OrderEnum {
SO(1, "SO");
/**
* 类型code
*/
private Integer type;
/**
* 描述
*/
private String desc;
private static final Map<Integer, OrderSourceEnum> ENUM_MAP;
//枚举中初始化一个map,key为值,value为enum
static {
OrderEnum[] values = values();
Map<Integer, OrderEnum> enToCn = new HashMap<>(values.length);
for (OrderEnum value : values) {
enToCn.put(value.getType(), value);
}
ENUM_MAP = Collections.unmodifiableMap(enToCn);
}
/**
* 根据类型查找枚举
*/
public static OrderSourceEnum searchEnumByType(Integer type){
return ENUM_MAP.get(type);
}
@Mapper(componentModel = "spring", unmappedTargetPolicy = ReportingPolicy.IGNORE)
public interface OrderMapStruct {
//需要转换枚举类的字段,建议在do的转换上写不是list的转化上写
@Mapping(target = "source", expression = "java(com.enums.Enum.searchEnumByType(orderDO.getSource()))")
OrderDTO orderDo2dto(OrderDO orderDO);
2、返回的两个实体类中参数名不一致
@Mappings({
@Mapping(target = "uname", source = "sname")
// 多个属性不对应可以用 "," 隔开编写多个@Mapping
// ,@Mapping(target = "uname", source = "sname")
})
OrderDTO orderDo2dto(OrderDO orderDO);
三、批量插入
mybatis批量插入(传入数据不能有空值)
<insert id="insertOrderStatisticDayList">
insert into order_day
(order_num, count_date)
values
<foreach collection="list" item="item" separator=",">
(#{item.orderNum,jdbcType=BIGINT}, #{item.countDate,jdbcType=DATE})
</foreach>
</insert>
四、hutool工具
参考:常见方法
参考链接:
1、事务
2、mapStruct其他转换
网友评论