涉及两张表的两个实体对象
用于在业务逻辑层和持久层(数据库访问层)之间传输数据。
DTO的主要目的是将多个实体(Entity)的部分属性或多个实体关联属性封装成一个对象,以便在业务层进行数据传输和处理,从而避免直接暴露实体对象给上层或客户端,即前端的请求设计了多张表的内容
使用步骤-基于mybatisplus
1.创建表1实体类
2.创建表2实体类,封装一个实体2集合
3.两张表都需创建mapper,service
4.在服务层编写方法,注意,这里传参使用的子类
5.对应的controller调用该方法即可
涉及两张表的一个实体和另一个实体的单个属性
这里使用到的原理也是Dto
实现步骤
1.首先定义Page<Dish> pageinfo,通过条件信息,查询出dish表对象
2.其次,定义Page<DishDto> dishDtoPage,数据传输对象类集合,该类是用于存取菜品分类的名称及pageinfo的信息
3.将pageinfo的信息拷贝给dishDtoPage,需要注意的是,Page对象中的records使用于存取dish数据对象的,但是该对象信息不包含菜品分类的类名,不应该拷贝
BeanUtils.copyProperties(pageinfo,dishDtoPage,"records");
4.遍历查询到的pageinfo信息,该对象用于存取dish表的信息,在遍历的过程中,通过注入CategoryService信息,为categoryName进行赋值
5.将遍历出的信息封装成一个List集合对象
6.通过 dishDtoPage.setRecords(dishDtoList),为DishDto的records字段赋值,最后返回该对象,就能实现菜品分类名称的展示了```
```bash
public R<Page> page(int page,int pageSize,String name)
{
步骤一:
Page<Dish> pageinfo=new Page<>(page,pageSize);//分页查询,封装一个菜品类,菜品信息
/**
* 设置Dish对象的查询信息
*/
LambdaQueryWrapper<Dish> dishLambdaQueryWrapper=new LambdaQueryWrapper<>();
dishLambdaQueryWrapper.like(name!=null, Dish::getName,name);
dishLambdaQueryWrapper.orderByDesc(Dish::getUpdateTime);
dishService.page(pageinfo,dishLambdaQueryWrapper);//查询
步骤二:
Page<DishDto> dishDtoPage=new Page<>();//封装一个数据传输对象,以便获取该对象的某些属性
/**
* 使用BeanUtils.copyProperties方法,将pageinfo拷贝给dishDtoPage,records的参数不拷贝,
*/
// Page<Dish> ,records封装的是Dish数据对象 protected List<T> records;
步骤三:
BeanUtils.copyProperties(pageinfo,dishDtoPage,"records");
步骤四/五:
List<Dish> records = pageinfo.getRecords();//dish对象
/**
* 遍历Dish对象集合,并为DishDto中的categoryName赋值
*/
List<DishDto> dishDtoList=records.stream().map((item)->
{
DishDto dishDto=new DishDto();//构造方法创建的对象,其属性都为空,需要拷贝records的值
BeanUtils.copyProperties(item,dishDto);
Long categoryId = item.getCategoryId();
Category category = categoryService.getById(categoryId);//根据分类id查找分类
if(category!=null)
{
String categoryName = category.getName();
dishDto.setCategoryName(categoryName);
}
return dishDto;
}).collect(Collectors.toList());
/**
* 将page分页对象中的records重新赋值封装后,在将其返回给前端页面
*/
步骤六:
dishDtoPage.setRecords(dishDtoList);
return R.success(dishDtoPage);
}