DTO是數(shù)據(jù)傳輸對象(DTO)(Data Transfer Object)。
比如同時操作一個業(yè)務(wù)但是這個業(yè)務(wù)涉及到兩個表,這時可以再新建一個DTO表,繼承與需要使用的表再額外加上這個表里面不含的數(shù)據(jù)。
比如菜品表,菜品不但需要菜品的信息還需要口味的信息,一個菜品表不夠用,可以做個菜品表DTO,繼承于菜品表但是里面也有口味表的數(shù)據(jù)。文章來源:http://www.zghlxwxcb.cn/news/detail-595668.html
import com.zhengdidi.reggie.entity.Dish;
import com.zhengdidi.reggie.entity.DishFlavor;
import lombok.Data;
import java.util.ArrayList;
import java.util.List;
@Data
public class DishDto extends Dish {
//菜品對應(yīng)的口味數(shù)據(jù)
private List<DishFlavor> flavors = new ArrayList<>();
private String categoryName;
private Integer copies;
}
在增刪改查時調(diào)用這個DTO對象。文章來源地址http://www.zghlxwxcb.cn/news/detail-595668.html
package com.zhengdidi.reggie.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.zhengdidi.reggie.dto.DishDto;
import com.zhengdidi.reggie.entity.Dish;
import com.zhengdidi.reggie.entity.DishFlavor;
import com.zhengdidi.reggie.mapper.DishMapper;
import com.zhengdidi.reggie.service.DishFlavorService;
import com.zhengdidi.reggie.service.DishService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;
import java.util.stream.Collectors;
@Service
@Slf4j
public class DishServiceImpl extends ServiceImpl<DishMapper,Dish> implements DishService {
@Autowired
private DishFlavorService dishFlavorService;
/**
* 新增菜品,同時保存對應(yīng)的口味數(shù)據(jù)
* @param dishDto
*/
@Transactional
public void saveWithFlavor(DishDto dishDto) {
//保存菜品的基本信息到菜品表dish
this.save(dishDto);
Long dishId = dishDto.getId();//菜品id
//菜品口味
List<DishFlavor> flavors = dishDto.getFlavors();
flavors = flavors.stream().map((item) -> {
item.setDishId(dishId);
return item;
}).collect(Collectors.toList());
//保存菜品口味數(shù)據(jù)到菜品口味表dish_flavor
dishFlavorService.saveBatch(flavors);
}
/**
* 根據(jù)id查詢菜品信息和對應(yīng)的口味信息
* @param id
* @return
*/
public DishDto getByIdWithFlavor(Long id) {
//查詢菜品基本信息,從dish表查詢
Dish dish = this.getById(id);
DishDto dishDto = new DishDto();
BeanUtils.copyProperties(dish,dishDto);
//查詢當(dāng)前菜品對應(yīng)的口味信息,從dish_flavor表查詢
LambdaQueryWrapper<DishFlavor> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(DishFlavor::getDishId,dish.getId());
List<DishFlavor> flavors = dishFlavorService.list(queryWrapper);
dishDto.setFlavors(flavors);
return dishDto;
}
@Override
@Transactional
public void updateWithFlavor(DishDto dishDto) {
//更新dish表基本信息
this.updateById(dishDto);
//清理當(dāng)前菜品對應(yīng)口味數(shù)據(jù)---dish_flavor表的delete操作
LambdaQueryWrapper<DishFlavor> queryWrapper = new LambdaQueryWrapper();
queryWrapper.eq(DishFlavor::getDishId,dishDto.getId());
dishFlavorService.remove(queryWrapper);
//添加當(dāng)前提交過來的口味數(shù)據(jù)---dish_flavor表的insert操作
List<DishFlavor> flavors = dishDto.getFlavors();
flavors = flavors.stream().map((item) -> {
item.setDishId(dishDto.getId());
return item;
}).collect(Collectors.toList());
dishFlavorService.saveBatch(flavors);
}
}
到了這里,關(guān)于Java中什么是DTO,什么場景下使用DTO,怎么使用DTO。的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!