(一)代码编写
1.阅读需求,确保理解其中的每一个要素:
- 获取全部运费模板:这意味着我需要从数据库中查询所有运费模板数据。
- 按创建时间倒序排序:这意味着查询结果需要根据模板的创建时间进行排序,最新的模板应排在最前面。
2.查看项目中是否已有用于表示运费模板的实体类(例如 CarriageEntity
)。通常这个类会包含必要的字段,如 id
、created
(创建时间)等
- 使用查询包装器 :利用
LambdaQueryWrapper
来构造查询条件。 - 添加排序条件 :使用
orderByDesc
方法,指定按照created
字段进行降序排序。
3.我会使用框架(Service)提供的查询方法来执行查询。例如,如果有一个基础服务类提供了 list
方法,我会调用这个方法并传入之前构造的查询条件。
4.查询返回的通常是一个实体对象列表(例如 List<CarriageEntity>
),我需要将这些实体转换为 DTO 对象,以便返回给调用者。
得如下; 写在controller中
@Override
public List<CarriageDTO> findAll() {
// 1. 构造查询条件,按创建时间倒序
LambdaQueryWrapper<CarriageEntity> queryWrapper = Wrappers.lambdaQuery();
queryWrapper.orderByDesc(CarriageEntity::getCreated);
// 2. 查询数据库
List<CarriageEntity> list = super.list(queryWrapper);
// 3. 将结果转换为 DTO 类型
return list.stream().map(CarriageUtils::toDTO).collect(Collectors.toList());
}
(二)代码解析:
1.LambdaQueryWrapper<CarriageEntity>
中的 CarriageEntity
是一个泛型参数
<>内指定 查询包装器将要操作的实体类型
2.LambdaQueryWrapper
提供了链式调用的方法 来构造查询条件
3.使用 Lambda 表达式 引用实体类的字段 ,即.orderByDesc(CarriageEntity::getCreated);
想了想还是补充:
map()使用数据类型转换类CarriageUtils将查询到的结果映射(转换)DTO
collect(Collectors.toList())将结果收集成列表(这是一个固定搭配)
(三)单元测试
1.创建测试目录
选择
2.创建测试
alt+enter之后
创建完测试之后就可以在刚刚创建的测试目录找到创建的测试
测试代码:
package com.sl.ms.carriage.service.impl;
import com.sl.ms.carriage.domain.dto.CarriageDTO;
import com.sl.ms.carriage.service.CarriageService;
import org.junit.jupiter.api.Test;
import org.junit.runner.RunWith;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
import javax.annotation.Resource;
import java.util.List;
@SpringBootTest
class CarriageServiceImplTest {
@Resource
CarriageService carriageService;
@Test
void saveOrUpdate() {
}
@Test
void findAll() {
List<CarriageDTO> all = carriageService.findAll();
all.forEach(System.out::println);
}
@Test
void compute() {
}
}
单元测试遇到bug了 修好再回来补充↓