当前位置: 首页 > news >正文

湖南网站建设 莫道婚纱摄影介绍

湖南网站建设 莫道,婚纱摄影介绍,17一起做网店普宁,沈阳建网站 哪家好目录 菜品分页查询 需求分析和设计 代码开发 设计DTO类 设计VO类 Controller层 Service层接口 Service层实现类 Mapper层 功能测试 删除菜品 需求设计和分析 代码开发 Controller层 Service层接口 Service层实现类 Mapper层 功能测试 修改菜品 需求分析和设…目录 菜品分页查询 需求分析和设计 代码开发 设计DTO类 设计VO类 Controller层 Service层接口 Service层实现类 Mapper层 功能测试 删除菜品 需求设计和分析 代码开发 Controller层 Service层接口 Service层实现类 Mapper层 功能测试 修改菜品 需求分析和设计 代码开发 根据id查询菜品实现 Controller层 Service层接口 Service层实现类 Mapper层 修改菜品实现 Controller层 Service层接口 Service层实现类 Mapper层 功能测试 1--苍穹外卖-SpringBoot项目介绍及环境搭建 详解-CSDN博客 2--苍穹外卖-SpringBoot项目中员工管理 详解一-CSDN博客 3--苍穹外卖-SpringBoot项目中员工管理 详解二-CSDN博客 4--苍穹外码-SpringBoot项目中分类管理 详解-CSDN博客 5--苍穹外卖-SpringBoot项目中菜品管理 详解一-CSDN博客 6--苍穹外卖-SpringBoot项目中菜品管理 详解二-CSDN博客 7--苍穹外卖-SpringBoot项目中套餐管理 详解一-CSDN博客 8--苍穹外卖-SpringBoot项目中套餐管理 详解二-CSDN博客 9--苍穹外卖-SpringBoot项目中Redis的介绍及其使用实例 详解-CSDN博客 菜品分页查询 需求分析和设计 业务规则 根据页码展示菜品信息 每页展示10条数据 分页查询时可以根据需要输入菜品名称、菜品分类、菜品状态进行查询 代码开发 设计DTO类 根据菜品分页查询接口定义设计对应的DTO 在sky-pojo模块中 package com.sky.dto;import lombok.Data;import java.io.Serializable;Data public class DishPageQueryDTO implements Serializable {private int page;private int pageSize;private String name;//分类idprivate Integer categoryId;//状态 0表示禁用 1表示启用private Integer status;}设计VO类 根据菜品分页查询接口定义设计对应的VO在返回的数据中categoryName属于另外一个文件中需要使用VO转换属性为json方便前端展示 在sky-pojo模块中 package com.sky.vo;import com.sky.entity.DishFlavor; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; import java.io.Serializable; import java.math.BigDecimal; import java.time.LocalDateTime; import java.util.ArrayList; import java.util.List;Data Builder NoArgsConstructor AllArgsConstructor public class DishVO implements Serializable {private Long id;//菜品名称private String name;//菜品分类idprivate Long categoryId;//菜品价格private BigDecimal price;//图片private String image;//描述信息private String description;//0 停售 1 起售private Integer status;//更新时间private LocalDateTime updateTime;//分类名称private String categoryName;//菜品关联的口味private ListDishFlavor flavors new ArrayList();//private Integer copies; }Controller层 根据接口定义创建DishController的page分页查询方法 //菜品分页查询GetMapping(/page)ApiOperation(菜品分页查询)public ResultPageResult page(DishPageQueryDTO dishPageQueryDTO){log.info(菜品分页查询{},dishPageQueryDTO);PageResult pageResultdishService.pageQuery(dishPageQueryDTO);return Result.success(pageResult);} Service层接口 在 DishService 中扩展分页查询方法 //菜品分页查询PageResult pageQuery(DishPageQueryDTO dishPageQueryDTO); Service层实现类 在 DishServiceImpl 中实现分页查询方法 //菜品分页查询Overridepublic PageResult pageQuery(DishPageQueryDTO dishPageQueryDTO) {PageHelper.startPage(dishPageQueryDTO.getPage(),dishPageQueryDTO.getPageSize());PageDishVO page dishMapper.pageQuery(dishPageQueryDTO);return new PageResult(page.getTotal(),page.getResult());} Mapper层 在 DishMapper 接口中声明 pageQuery 方法 //菜品分页查询PageDishVO pageQuery(DishPageQueryDTO dishPageQueryDTO); 在 DishMapper.xml 中编写SQL select idpageQuery resultTypecom.sky.vo.DishVOselect d.* ,c.name as categoryName from dish d left outer join category c on d.category_idc.idwhereif testname!nulland d.name like concat(%,#{name},%)/ifif testcategoryId!nulland d.category_id#{categoryId}/ifif teststatus!nulland d.status#{status}/if/whereorder by d.create_time desc/select 功能测试 删除菜品 需求设计和分析 业务规则 可以一次删除一个菜品也可以批量删除菜品 起售中的菜品不能删除 被套餐关联的菜品不能删除 删除菜品后关联的口味数据也需要删除掉 代码开发 Controller层 根据删除菜品的接口定义在DishController中创建方法 //菜品批量删除DeleteMappingApiOperation(菜品批量删除)public ResultString delete(RequestParam ListLong ids){//RequestParam注解使用mvc框架可以获取到参数123中的变量值log.info(菜品批量删除{},ids);dishService.deleteBatch(ids);return Result.success();} Service层接口 在DishService接口中声明deleteBatch方法 //菜品批量删除void deleteBatch(ListLong ids); Service层实现类 在DishServiceImpl中实现deleteBatch方法 //菜品批量删除Transactional//事务public void deleteBatch(ListLong ids) {//判断当前菜品是否能够删除---是否存在起售中的菜品for (Long id : ids) {//根据主键查询菜品Dish dishdishMapper.getById(id);//查询是否起售if (Objects.equals(dish.getStatus(), StatusConstant.ENABLE)){//当前菜品处于起售中不能删除throw new DeletionNotAllowedException(MessageConstant.DISH_ON_SALE);}}//判断当前菜品是否能够删除---是否被套餐关联了ListLong setmealIdssetmealDishMapper.getSetmealIdsByDishIds(ids);if (setmealIds!null !setmealIds.isEmpty()){//当前菜品被套餐关联了不能删除throw new DeletionNotAllowedException(MessageConstant.DISH_BE_RELATED_BY_SETMEAL);}//删除菜品表中的菜品数据for (Long id : ids) {dishMapper.deleteById(id);//删除菜品关联的口味数据dishFlavorMapper.deleteByDishId(id);} Mapper层 在DishMapper中声明getById方法并配置SQL //根据主键查询菜品Select(select *from dish where id#{id})Dish getById(Long id); 创建SetmealDishMapper声明getSetmealIdsByDishIds方法并在xml文件中编写SQL package com.sky.mapper;import org.apache.ibatis.annotations.Mapper;import java.util.List;Mapper public interface SetmealDishMapper {//根据菜品id查询对应的套餐idListLong getSetmealIdsByDishIds(ListLong dishIds);}SetmealDishMapper.xml ?xml version1.0 encodingUTF-8 ? !DOCTYPE mapper PUBLIC -//mybatis.org//DTD Mapper 3.0//ENhttp://mybatis.org/dtd/mybatis-3-mapper.dtd mapper namespacecom.sky.mapper.SetmealDishMapperselect idgetSetmealIdsByDishIds resultTypejava.lang.Longselect setmeal_id from setmeal_dish where dish_id inforeach collectiondishIds itemdishId separator, open( close)#{dishId}/foreach/select /mapper 在DishMapper.java中声明deleteById方法并配置SQL //根据主键删除菜品数据Delete(delete from dish where id#{id})void deleteById(Long id); 在DishFlavorMapper中声明deleteByDishId方法并配置SQL //根据菜品id删除对应的口味数据Delete(delete from dish_flavor where dish_id#{dishId})void deleteByDishId(Long dishId); 性能优化 在DishServiceImpl中删除菜品是一条一条传送执行的大大降低了执行效率原代码如下 //删除菜品表中的菜品数据for (Long id : ids) {dishMapper.deleteById(id);//删除菜品关联的口味数据dishFlavorMapper.deleteByDishId(id);} 为了提高性能进行修改使用动态sql执行删除操作 //根据菜品id集合批量删除菜品数据//sql:delete from dish where id in(?,?,?)dishMapper.deleteByIds(ids);//根据菜品id集合批量删除关联的口味数据//sql:delete from dish_flavor where dish_id in(?,?,?)dishMapper.deleteByDishIds(ids); 在DishMapper中 //根据菜品id集合批量删除菜品void deleteByIds(ListLong ids);//根据菜品id集合批量删除关联的口味数据void deleteByDishIds(ListLong dishId); 在DishMapper.xml中 delete iddeleteByIdsdelete from dish where id inforeach collectionids open( separator, close) itemid#{id}/foreach/deletedelete iddeleteByDishIdsdelete from dish_flavor where dish_id inforeach collectiondishIds open( close) separator, itemdishId#{dishId}/foreach/delete 功能测试 进行前后端联调删除成功 修改菜品 需求分析和设计 接口 根据id查询菜品 根据类型查询分类(已实现) 文件上传(已实现) 修改菜品 代码开发 根据id查询菜品实现 Controller层 根据id查询菜品的接口定义在DishController中创建方法 //根据id查询菜品GetMapping(/{id})ApiOperation(根据id查询菜品)public ResultDishVO getById(PathVariable Long id){log.info(根据id查询菜品{},id);DishVO dishVOdishService.getByIdWithFlavor(id);return Result.success(dishVO);} Service层接口 在DishService接口中声明getByIdWithFlavor方法 //根据id查询菜品和对应的口味数据DishVO getByIdWithFlavor(Long id); Service层实现类 在DishServiceImpl中实现getByIdWithFlavor方法 //根据id查询菜品和对应的口味数据Overridepublic DishVO getByIdWithFlavor(Long id) {//根据id查询菜品数据Dish dishdishMapper.getById(id);//根据菜品id查询口味数据ListDishFlavor dishFlavorsdishFlavorMapper.getByDishId(id);//将查询到的数据封装到VODishVO dishVO new DishVO();BeanUtils.copyProperties(dish,dishVO);dishVO.setFlavors(dishFlavors);return dishVO;} Mapper层 在DishFlavorMapper中声明getByDishId方法并配置SQL //根据id查询对应的口味数据Select(select *from dish_flavor where dish_id#{dishId})ListDishFlavor getByDishId(Long dishId); 修改菜品实现 Controller层 根据修改菜品的接口定义在DishController中创建方法 //修改菜品PutMappingApiOperation(修改菜品)public ResultString update(RequestBody DishDTO dishDTO){log.info(修改菜品{},dishDTO);dishService.updateWithFlavor(dishDTO);return Result.success();} Service层接口 在DishService接口中声明updateWithFlavor方法 //根据id修改菜品基本信息和对应的口味数据void updateWithFlavor(DishDTO dishDTO); Service层实现类 在DishServiceImpl中实现updateWithFlavor方法 //根据id修改菜品基本信息和对应的口味信息Overridepublic void updateWithFlavor(DishDTO dishDTO) {Dish dish new Dish();BeanUtils.copyProperties(dishDTO,dish);//修改菜品表基本信息dishMapper.update(dish);//删除原有的口味数据dishFlavorMapper.deleteByDishId(dishDTO.getId());//重新插入口味数据ListDishFlavor flavors dishDTO.getFlavors();if (flavors!null !flavors.isEmpty()){flavors.forEach(dishFlavor - {dishFlavor.setDishId(dishDTO.getId());});//向口味表插入n条数据dishFlavorMapper.insertBatch(flavors);}} Mapper层 在DishMapper中声明update方法 //根据id动态修改菜品数据AutoFill(value OperationType.UPDATE)void update(Dish dish); 并在DishMapper.xml文件中编写SQL: update idupdateupdate dishsetif testname!nullname#{name},/ifif testcategoryId!nullcategory_id#{categoryId},/ifif testprice!nullprice#{price},/ifif testimage!nullimage#{image},/ifif testdescription!nulldescription#{description},/ifif teststatus!nullstatus#{status},/ifif testupdateTime!nullupdate_time#{updateTime},/ifif testupdateUser!nullupdate_user#{updateUser},/if/setwhere id#{id}/update 功能测试
http://www.dnsts.com.cn/news/69313.html

相关文章:

  • 上海专业做网站公司有哪些哪里有做网站的教程
  • 做相册哪个网站好网贷代理推广
  • 做盗版电影网站犯法不长沙市停课最新消息
  • 上海建设银行网站莘庄网站的pv统计功能怎样做
  • logo网站有哪些网站建设业务活动
  • 建设信用卡中心网站怎么搭建网站
  • 福州网站怎么做seo衡阳市建设学校官方网站
  • 网站信息登记表扫描件德勤管理咨询
  • 连衣裙一起做网站wordpress的数据库配置文件
  • 网站建设前台与后台最新技术网站建设流程行情
  • 外贸高端网站定制WordPress纯代码html地图
  • 湘潭网站建设 电话磐石网络郑州网站seo多少钱
  • php做彩票网站吗深圳网页设计与制作公司
  • 网站建设选超速云建站网站可以做系统还原吗
  • 建站系统低价建站新闻资讯wordpress建站怎么样
  • phpcms仿行业网站建湖人才网今曰招
  • 做亚马逊网站费用甘肃建设厅网站首页
  • 代理东莞网站制作公司wordpress 进度插件
  • 网站通栏广告素材兰州网站设计厂家
  • 阿里巴巴网站推广怎么做游戏推广平台代理加盟
  • 南宁百度 - 网站正在建设中广东住房和城乡建设部网站
  • 属于自己的网站做网站开发需要学什么
  • 查网站怎么做的网站建设相关博客
  • dede 网站目录微网站和微信公共平台的区别
  • 厦门市建设协会网站首页安卓app怎么开发
  • 建设工程案例网站dnf交易网站建设
  • 网站弹出咨询这个怎么做做网站499
  • 网站更新怎么做长沙网页制作设计
  • 做英文兼职的网站怎样做国外网站推广
  • 做网站需要雇什么人忻州集团网站建设