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

智能家居网站开发成都家装设计公司排名榜

智能家居网站开发,成都家装设计公司排名榜,贵州网络推广公司,桂林网需求分析与设计 一#xff1a;产品原型 后台系统中可以管理菜品信息#xff0c;通过 新增功能来添加一个新的菜品#xff0c;在添加菜品时需要选择当前菜品所属的菜品分类#xff0c;并且需要上传菜品图片。 新增菜品原型#xff1a; 当填写完表单信息, 点击保存…需求分析与设计 一产品原型 后台系统中可以管理菜品信息通过 新增功能来添加一个新的菜品在添加菜品时需要选择当前菜品所属的菜品分类并且需要上传菜品图片。 新增菜品原型 当填写完表单信息, 点击保存按钮后, 会提交该表单的数据到服务端, 在服务端中需要接受数据, 然后将数据保存至数据库中。 业务规则 菜品名称必须是唯一的 菜品必须属于某个分类下不能单独存在 新增菜品时可以根据情况选择菜品的口味 每个菜品必须对应一张图片 二接口设计 根据上述原型图先**粗粒度**设计接口共包含3个接口。 - 根据类型查询分类已完成 - 文件上传已完成 - 新增菜品 接下来明确接口的请求方式、请求路径、传入参数和返回值。 口味非必须且是object[]数组可以传多个口味一个菜品可以对应多种口味 所以后端使用集合封装 三数据表设计 新增菜品其实就是将新增页面录入的菜品信息插入到dish表如果添加了口味做法还需要向dish_flavor表插入数据。所以在新增菜品时涉及到两个表 表名说明dish菜品表dish_flavor菜品口味表 1). 菜品表:dish 字段名数据类型说明备注idbigint主键自增namevarchar(32)菜品名称唯一category_idbigint分类id逻辑外键pricedecimal(10,2)菜品价格imagevarchar(255)图片路径descriptionvarchar(255)菜品描述statusint售卖状态1起售 0停售create_timedatetime创建时间update_timedatetime最后修改时间create_userbigint创建人idupdate_userbigint最后修改人id 2). 菜品口味表:dish_flavor 字段名数据类型说明备注idbigint主键自增dish_idbigint菜品id逻辑外键namevarchar(32)口味名称valuevarchar(255)口味值 代码开发 一设计DTO类 package com.sky.dto;import com.sky.entity.DishFlavor; import lombok.Data; import java.io.Serializable; import java.math.BigDecimal; import java.util.ArrayList; import java.util.List;Data public class DishDTO 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 ListDishFlavor flavors new ArrayList(); } 细节 注意口味用List集合封装因为前端可以传递多种口味数据对应口味实体类 口味实体类如下 /*** 菜品口味*/ Data Builder NoArgsConstructor AllArgsConstructor public class DishFlavor implements Serializable {private static final long serialVersionUID 1L;private Long id;//菜品idprivate Long dishId;//口味名称private String name;//口味数据listprivate String value;} 二Controller层 package com.sky.controller.admin;import com.sky.dto.DishDTO; import com.sky.dto.DishPageQueryDTO; import com.sky.entity.Dish; import com.sky.result.PageResult; import com.sky.result.Result; import com.sky.service.DishService; import com.sky.vo.DishVO; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import java.util.List; import java.util.Set;/*** 菜品管理*/ RestController RequestMapping(/admin/dish) Api(tags 菜品相关接口) Slf4j public class DishController {Autowiredprivate DishService dishService;/*** 新增菜品** param dishDTO* return*/PostMappingApiOperation(新增菜品)public Result save(RequestBody DishDTO dishDTO) {log.info(新增菜品{}, dishDTO);dishService.saveWithFlavor(dishDTO);//后绪步骤开发return Result.success();} } 细节 注意接口文档上显示返回Result中data是非必须的所以Result后可以不加泛型。 三Service类事务、forEach循环 package com.sky.service.impl;Service Slf4j public class DishServiceImpl implements DishService {Autowiredprivate DishMapper dishMapper;Autowiredprivate DishFlavorMapper dishFlavorMapper;/*** 新增菜品和对应的口味** param dishDTO*/Transactionalpublic void saveWithFlavor(DishDTO dishDTO) {Dish dish new Dish();BeanUtils.copyProperties(dishDTO, dish);//向菜品表插入1条数据dishMapper.insert(dish);//后绪步骤实现//获取insert语句生成的主键值Long dishId dish.getId();ListDishFlavor flavors dishDTO.getFlavors();if (flavors ! null flavors.size() 0) {flavors.forEach(dishFlavor - {dishFlavor.setDishId(dishId);});//向口味表插入n条数据dishFlavorMapper.insertBatch(flavors);//后绪步骤实现}}} 细节 Service层别忘记要把DTO转换为实体对象 利用BeanUtils提供的copyProperties方法可以快速转换因为新增菜品需要操作两张数据表菜品表和口味表所以需要原子操作于是定义事务 Transactional注解又因为口味表需要菜品表的主键菜品id而菜品id是数据库负责维护的自增主键所以需要mybatis配合进行主键回填。 Long dishId dish.getId();成功的前提是mapper层set了id因为口味是非必须的请求数据所以首先需要判断集合是否为空 之后需要为口味对象赋值菜品id最后批量的插入口味表forEach方法的使用 集合.forEach(元素名-{元素所进行的操作}) 四Mapper层主键回填、批量删除 dishMapper: /*** 插入菜品数据** param dish*/AutoFill(value OperationType.INSERT)void insert(Dish dish); 对应的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.DishMapperinsert idinsert useGeneratedKeystrue keyPropertyidinsert into dish (name, category_id, price, image, description, create_time, update_time, create_user, update_user,status)VALUES (#{name},#{categoryId},#{price},#{image},#{description},#{createTime},#{updateTime},#{createUser},#{updateUser},#{status})/insert /mapper 细节 这行定义了主键回填insert idinsert useGeneratedKeystrue keyPropertyid会将id的值返回到参数列表的Dish对象dish的id属性中 dishFlavorMapper package com.sky.mapper;import com.sky.entity.DishFlavor; import java.util.List;Mapper public interface DishFlavorMapper {/*** 批量插入口味数据* param flavors*/void insertBatch(ListDishFlavor flavors);} 对应的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.DishFlavorMapperinsert idinsertBatchinsert into dish_flavor (dish_id, name, value) VALUESforeach collectionflavors itemdf separator,(#{df.dishId},#{df.name},#{df.value})/foreach/insert /mapper 细节 批量插入 foreach collection参数列表中传递过来的集合名 item元素名称自定义 separator下列元素的属性之间分割的分隔符             (#{df.dishId},#{df.name},#{df.value})         /foreach 形成的效果 (  ,   ,   ,)
http://www.pierceye.com/news/734082/

相关文章:

  • 中国建设银行门户网站企业wordpress锁
  • 购物网站建设所需软件科技部网站公布首批创新型县(市)建设名单
  • 网站访客qq抓取淘宝官网首页入口
  • 网站界面设计实训总结cp wordpress
  • 网站建设综合案例济宁北湖建设局网站
  • 青岛网站建设运营网络程序
  • 哈铁工程建设公司网站可做推广的网站
  • 建湖做网站哪家最好计算机网络中小型企业网络设计方案
  • 如何用 python 做网站网站后台seo优化如何做
  • 网站搭建徐州百度网络c2c平台是洗钱吗
  • 二级域名站群微信上浏览自己做的网站吗
  • 十堰微网站建设费用ps做网站尺寸
  • 网站后台制作用的软件电子商务网站推广案例
  • 汽车低价网站建设wordpress怎么搜索中文主题
  • 温江建设局备案网站高品质外贸网站建设
  • 营销网站制作哪家好洛阳外贸网站推广
  • 手机网站与app广州番禺区美食攻略
  • 做ug图纸的网站网站建设企业站
  • 网站文章多久才收录合作社网站建设
  • 福建泉州网站建设做网站网页的成本
  • 武威网站制作公司服务电话网站怎么做微信登录
  • 网站换空间 seo备案号怎么放到网站
  • 卡易售网站建设信息流投放平台
  • 装修设计公司网站有哪些5g国产天天5g天天
  • 网站内容管理校园网站建设报价
  • 哪个网站系统做的好网站设计原则的第三要素
  • 老区建设网站亚马逊市场营销案例分析
  • 固原建设厅官方网站智慧树网站的章节题做不了
  • 网站建设人才logo设计在线
  • 在网站上做广告教育网站平面设计