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. 创建数据库

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

逻辑外键

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

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

sql 复制代码
//菜品分类
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查询菜品

xml 复制代码
<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>
java 复制代码
@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}")

新增

java 复制代码
@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})")
    

修改

java 复制代码
    @Update("update address_book set is_default = #{isDefault} where user_id = #{userId}")
xml 复制代码
    <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>

删除:

java 复制代码
@Delete("delete from address_book where id = #{id}")
相关推荐
Brookty5 小时前
Java线程安全与中断机制详解
java·开发语言·后端·学习·java-ee
飞速移动的代码菌5 小时前
【DataWhale】快乐学习大模型 | 202507,Task08笔记
笔记·学习
不在了情绪6 小时前
[ The Missing Semester of Your CS Education ] 学习笔记 Vim篇
笔记·学习·vim
试着6 小时前
零基础学习性能测试第五章:JVM性能分析与调优-JVM概念,java程序运行原理
java·jvm·学习·零基础·性能测试
遇见尚硅谷7 小时前
C语言:20250728学习(指针)
c语言·开发语言·数据结构·c++·笔记·学习·算法
Aronup7 小时前
NLP学习开始01-线性回归
学习·自然语言处理·线性回归
墨迹的陌离9 小时前
【Linux】重生之从零开始学习运维之Mysql
linux·运维·服务器·数据库·学习·mysql
这就是佬们吗9 小时前
初识 docker [上]
java·开发语言·笔记·docker·容器
幻风_huanfeng9 小时前
学习人工智能所需知识体系及路径详解
人工智能·学习
试着10 小时前
零基础学习性能测试第六章:性能难点-Jmeter文件上传场景压测
学习·jmeter·零基础·性能测试