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

JavaWeb(苍穹外卖)--学习笔记14

前言

终于开始学习做项目了,本篇文章是学习B站黑马程序员苍穹外卖的学习笔记📑。我的学习路线是Java基础语法-JavaWeb-做项目,管理端的功能学习完之后,就进入到了用户端微信小程序的开发,这篇文章是把我觉得JavaWeb的学习中比较重要的内容写一个总结(其实因为学到下单支付太难了🤪我复习复习前面的)

😗Controller层(这里只讲讲几个需要注意的注解)

管理服务端的动态资源:
SpringFramework中提供很多实用功能,如:依赖注入、事务管理、web开发支持、数据访问、消息服务等等。

1. @ResponseBody注解
• 类型:方法注解、类注解
• 位置:书写在Controller方法上或类上
• 作用:将方法返回值直接响应给浏览器,如果返回值类型是实体对
象/集合,将会转换为JSON格式后在响应给浏览器

@RestController注解,而这个注解是由两个注解组合起来的,分别是:@Controller 、@ResponseBody。

2. 请求方法:
在项目开发中,标志当前方法用什么方式请求。
• GET方式:@GetMapping
• POST方式:@PostMapping
• PUT方式:@PutMapping
• DELETE方式:@DeleteMapping

3. 参数接受:

(1)简单参数接收:(@RequestParam注解required属性默认为true,代表该参数必须传递,如果不传递将报错。 如果参数可选,可以将属性设置为false。)
@RequestParam(请求参数与形参相同,可以省略)

(2)json参数接受
○ JSON格式的参数,通常会使用一个实体对象进行接收 。
○ 规则:JSON数据的键名与方法形参对象的属性名相同,并需要使用**@RequestBody**注解标识。( 注:接收对象中只要有JSON数据就行)

(3)路径参数接受
使用 @PathVariable获取路径参数
如果路径参数名与controller方法形参名称一致,@PathVariable注解
的value属性是可以省略的。

🔍数据库(Mapper层):

1. 创建数据库

感觉这里主要是外键的问题(这里主要是逻辑外键):
逻辑外键

  • 概念:在业务层逻辑中,解决外键关联。
  • 通过逻辑外键,就可以很方便的解决上述问题。

这里以菜品分类,菜品和口味为例:

//菜品分类
DROP TABLE IF EXISTS `category`;
CREATE TABLE `category` (`id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键',`type` int DEFAULT NULL COMMENT '类型   1 菜品分类 2 套餐分类',`name` varchar(32) COLLATE utf8_bin NOT NULL COMMENT '分类名称',`sort` int NOT NULL DEFAULT '0' COMMENT '顺序',`status` int DEFAULT NULL COMMENT '分类状态 0:禁用,1:启用',`create_time` datetime DEFAULT NULL COMMENT '创建时间',`update_time` datetime DEFAULT NULL COMMENT '更新时间',`create_user` bigint DEFAULT NULL COMMENT '创建人',`update_user` bigint DEFAULT NULL COMMENT '修改人',PRIMARY KEY (`id`),UNIQUE KEY `idx_category_name` (`name`)
) ENGINE=InnoDB AUTO_INCREMENT=23 DEFAULT CHARSET=utf8mb3 COLLATE=utf8_bin COMMENT='菜品及套餐分类';//菜品
DROP TABLE IF EXISTS `dish`;
CREATE TABLE `dish` (`id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键',`name` varchar(32) COLLATE utf8_bin NOT NULL COMMENT '菜品名称',`category_id` bigint NOT NULL COMMENT '菜品分类id',`price` decimal(10,2) DEFAULT NULL COMMENT '菜品价格',`image` varchar(255) COLLATE utf8_bin DEFAULT NULL COMMENT '图片',`description` varchar(255) COLLATE utf8_bin DEFAULT NULL COMMENT '描述信息',`status` int DEFAULT '1' COMMENT '0 停售 1 起售',`create_time` datetime DEFAULT NULL COMMENT '创建时间',`update_time` datetime DEFAULT NULL COMMENT '更新时间',`create_user` bigint DEFAULT NULL COMMENT '创建人',`update_user` bigint DEFAULT NULL COMMENT '修改人',PRIMARY KEY (`id`),UNIQUE KEY `idx_dish_name` (`name`)
) ENGINE=InnoDB AUTO_INCREMENT=70 DEFAULT CHARSET=utf8mb3 COLLATE=utf8_bin COMMENT='菜品';//口味
DROP TABLE IF EXISTS `dish_flavor`;
CREATE TABLE `dish_flavor` (`id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键',`dish_id` bigint NOT NULL COMMENT '菜品',`name` varchar(32) COLLATE utf8_bin DEFAULT NULL COMMENT '口味名称',`value` varchar(255) COLLATE utf8_bin DEFAULT NULL COMMENT '口味数据list',PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=104 DEFAULT CHARSET=utf8mb3 COLLATE=utf8_bin COMMENT='菜品口味关系表';

2. Mapper 层常用代码(数据库查询操作语句):

根据ID查询菜品

<select id="list" resultType="Dish" parameterType="Dish">select * from dish<where><if test="name != null">and name like concat('%',#{name},'%')</if><if test="categoryId != null">and category_id = #{categoryId}</if><if test="status != null">and status = #{status}</if></where>order by create_time desc</select>
@Select("select sd.name, sd.copies, d.image, d.description " +"from setmeal_dish sd left join dish d on sd.dish_id = d.id " +"where sd.setmeal_id = #{setmealId}")

新增

@Insert("insert into address_book" +"        (user_id, consignee, phone, sex, province_code, province_name, city_code, city_name, district_code," +"         district_name, detail, label, is_default)" +"        values (#{userId}, #{consignee}, #{phone}, #{sex}, #{provinceCode}, #{provinceName}, #{cityCode}, #{cityName}," +"                #{districtCode}, #{districtName}, #{detail}, #{label}, #{isDefault})")

修改

    @Update("update address_book set is_default = #{isDefault} where user_id = #{userId}")
    <update id="update" parameterType="addressBook">update address_book<set><if test="consignee != null">consignee = #{consignee},</if><if test="sex != null">sex = #{sex},</if><if test="phone != null">phone = #{phone},</if><if test="detail != null">detail = #{detail},</if><if test="label != null">label = #{label},</if><if test="isDefault != null">is_default = #{isDefault},</if></set>where id = #{id}</update>

删除:

@Delete("delete from address_book where id = #{id}")
http://www.dtcms.com/a/302066.html

相关文章:

  • uni-app switch(开关选择器) BUG
  • SystemV消息队列揭秘:原理与实战
  • Vue、微信小程序、Uniapp 面试题整理最新整合版
  • springboot集成deepseek
  • Apache Ignite 的 JDBC Client Driver(JDBC 客户端驱动)
  • uniapp,uview 报错:Not Found:Page[2][-1;-1,8,0,28] at view.umd.min.js:1
  • 目前市面上有Android 16KB的手机吗
  • 时序数据库选型指南:工业大数据场景下基于Apache IoTDB技术价值与实践路径
  • Deep Learning_ Foundations and Concepts-Springer (2024)【拜读】前向编码器20章
  • TS面试题
  • 数据库概述(学习笔记)
  • 墨者:SQL注入漏洞测试(宽字节)
  • IDEA 手动下载安装数据库驱动,IDEA无法下载数据库驱动问题解决方案,IDEA无法连接数据库解决方案(通用,Oracle为例)
  • 自学嵌入式 day36 数据库
  • 《Go Web编程实战派--从入门到精通》的随笔笔记
  • 当非洲爱上“中国制造”:如何赢在起跑线
  • 【Oracle】闪回相关操作
  • UV安装并设置国内源
  • easyexcel填充方式导出-合并单元格并设置边框
  • QML QtCharts 极坐标图(PolarChartView)
  • 【WRF-Chem第二期】WRF-Chem有关 namelist 详解
  • 学习lxml库:Python XML/HTML处理利器
  • 安宝特方案丨智能革新安全管控:AR技术赋能物流仓储行业安全升级
  • C++中既重要又困难的部分—类和对象
  • Pandas 里的分箱操作
  • 《Linux服务与安全管理》| samba服务器配置匿名模式
  • 数据结构——图(二、图的存储和基本操作)
  • 跨境协作系统文化适配:多语言环境下的业务符号隐喻与交互习惯
  • 设计模式(二十)行为型:观察者模式详解
  • 常用设计模式系列(十五)—解释器模式