涉及两张表的两个实体对象
用于在业务逻辑层和持久层(数据库访问层)之间传输数据。
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字段赋值,最后返回该对象,就能实现菜品分类名称的展示了``````bashpublic 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);}