学习笔记-小程序-导入商品浏览功能实现

查询分类

接口实际设计

接口定位

接口名称:查询分类
Path: /user/category/list
Method: GET

作用:给前端返回"分类列表"

请求参数

  • type=1:菜品分类(dish category)

  • type=2:套餐分类(setmeal category)

分类类型:1 菜品分类;2 套餐分类

响应信息

  • code:integer(一般 1 表示成功,0/其他表示失败)

  • data:object[](数组,列表

  • msg:string(消息)

代码开发

controller

@RestController("userCategoryController")

@RequestMapping("/user/category")

@Api(tags = "查询分类接口")

public class CategoryController {

@Autowired

private CategoryService categoryService;

/**

* 查询分类

* @param type

* @return

*/

@GetMapping("/list")

@ApiOperation("查询分类")

public Result<List<Category>> list(Integer type) {

List<Category> list = categoryService.list(type);

return Result.success(list);

}

}

@RestController("userCategoryController"):这个注解标记了一个控制器类,它是一个 Spring MVC 控制器,并且返回的内容会自动序列化成 JSON

@RequestMapping("/user/category"):所有请求路径基于对应的/user/category

controller接受前端所传递的对应的type信息内容然后调用service其中内容

service

@Override

public List<Category> list(Integer type) {

// 校验分类类型是否合法

if (type == null || (type != 1 && type != 2)) {

throw new IllegalArgumentException("分类类型非法");

}

return categoryMapper.list(type);

}

参数校验:

检查 type 是否为 null,针对异常与否决定抛出抛出 IllegalArgumentException 异常

查询数据

  • 如果 type 参数有效(即 type 为 1 或 2),则通过 categoryMapper.list(type) 查询数据库中的分类数据,并返回结果。

Mapper

  • id="list":这是该 SQL 查询的标识符。

  • list 是你在 Mapper 接口中对应的方法名称,表示查询分类列表。

  • resultType="com.sky.entity.Category":表示查询结果的映射类型,即查询结果会映射到 com.sky.entity.Category 这个类

  • where status = 1

    • 这表示只查询 status = 1 的分类,假设 status 字段用来标识分类的状态,比如是否启用。
  • <if test="type != null">

    • if 标签用于动态 SQL 生成。test="type != null" 的意思是:如果方法中的 type 参数不为 null,则会加入条件 and type = #{type}

    • 关键点: 如果 typenull,这部分 SQL 就会被跳过,意味着查询条件中不会包括 type

  • and type = #{type}

    • 如果 type 不为 null,这部分 SQL 会被加上。#{type} 表示将 type 参数的值传递给 SQL 查询,用来过滤不同类型的分类。
  • </if>

    • 结束 if 标签。
  • order by sort asc, create_time desc

    • 排序条件:首先按 sort 升序排序,然后按 create_time 降序排序。通常,sort 用来控制显示顺序,create_time 用来按时间倒序展示最新的分类。

根据分类id去进行实际查询菜品信息

接口实际设计

接口定位

  • 接口路径: /user/dish/list

  • 请求方式: GET

  • 接口功能: 查询菜品列表

请求参数

查询参数:

  • categoryId:分类 ID,用于指定查询某个特定分类的数据

响应信息

code:业务状态码

data:返回信息。数组内容,包含对应的菜品/套餐信息内容

  • categoryIdinteger,可选):表示菜品或套餐所属的分类 ID。

  • createTimestring,可选):表示该菜品或套餐的创建时间,通常是一个日期时间字符串。

  • createUserinteger,可选):表示创建该菜品或套餐的用户 ID。

  • descriptionstring,可选):菜品或套餐的描述。

  • idinteger,必填):该菜品或套餐的唯一标识符。

  • imagestring,可选):该菜品或套餐的图片 URL 或路径。

  • namestring,必填):菜品或套餐的名称。

  • pricenumber,可选):该菜品或套餐的价格。

  • statusinteger,必填):菜品或套餐的状态,通常 0 表示禁用,1 表示启用。

  • updateTimestring,可选):最后更新时间,通常是一个日期时间字符串。

  • updateUserinteger,可选):最后更新该菜品或套餐的用户 ID

msg:提示信息

代码开发

controller

@RestController("userDishController"):表示这是一个 RESTful 风格的控制器,会返回 JSON 数据。

@RequestMapping("/user/dish"):处理请求基础路径

注入服务层

@Autowired

private DishService dishService;

接口方法

@GetMapping("/list")

@ApiOperation("根据分类查询菜品")

public Result<List<DishVO>> list(Long categoryId) {

Dish dish = new Dish();

dish.setCategoryId(categoryId);

dish.setStatus(StatusConstant.ENABLE); // 在查询时只获取启用的菜品

List<DishVO> list = dishService.listWithFlavor(dish);

return Result.success(list);

}

@GetMapping("/list")

  • 这个注解表示该方法处理 GET 请求,路径为 /user/dish/list

Long categoryId

  • 这是方法的参数,表示查询时需要传入一个 categoryId,即菜品的分类 ID。

  • 该参数通过 URL 请求传递

创建Dish菜品对象,传递对应属性值,给service/Mapper其中来进行使用

Service

方法定义

public List<DishVO> listWithFlavor(Dish dish) {

// 查询符合条件的菜品

List<Dish> dishList = dishMapper.list(dish);

// 用于存储返回的结果

List<DishVO> dishVOList = new ArrayList<>();

List<Dish> dishList = dishMapper.list(dish);

调用 dishMapper.list(dish) 查询符合条件的菜品数据

List<DishVO> dishVOList = new ArrayList<>();

创建一个空的 dishVOList,用于存储查询结果的转换数据

循环处理每个菜品

for (Dish d : dishList) {

DishVO dishVO = new DishVO();

BeanUtils.copyProperties(d, dishVO);

遍历查询结果 dishList 中的每个菜品。

创建一个新的 DishVO 对象,用于存储当前菜品的转换结果。

使用 BeanUtils.copyProperties()Dish 对象的数据复制到 DishVO 对象中。这样 dishVO 就会包含 dish 的所有属性

查询菜品的口味信息

// 根据菜品ID查询对应的口味

List<DishFlavor> flavors = dishFlavorMapper.getByDishId(d.getId());

调用 dishFlavorMapper.getByDishId(d.getId()) 方法,根据当前菜品的 id 查询该菜品的口味信息。getByDishId(d.getId()) 返回的是一个 List<DishFlavor>,即该菜品的多个口味

设置口味信息将菜品对象加入结果列表返回结果

Mapper

根据分类id来查询套餐接口

接口实际设计

接口定位

  • 接口路径/user/setmeal/list

  • 请求方式GET

  • 功能说明:根据分类 ID 查询套餐列表。

请求参数

categoryId (类型:string):

  • 描述:分类 ID,用于指定查询哪个分类下的套餐。

返回响应

codeinteger 类型) 状态码,通常用来标识接口是否成功执行

data这是实际返回的数据,包含了一个数组,数组内每个元素是一个套餐对象

  • categoryIdinteger):表示套餐所属分类的 ID。

  • createTimestring):表示套餐创建时间,通常是一个日期时间字符串。

  • createUserinteger):表示创建该套餐的用户 ID。

  • descriptionstring):套餐的描述,通常是字符串。

  • idinteger):套餐的唯一 ID。

  • imagestring):套餐的图片链接或路径。

  • namestring):套餐的名称。

  • pricenumber):套餐的价格。

  • statusinteger):套餐的状态,通常 1 表示启用,0 表示禁用。

  • updateTimestring):表示套餐的最后更新时间,通常是一个日期时间字符串。

  • updateUserinteger):表示最后更新该套餐的用户 ID。

msg:提示信息内容

代码开发

controller

注解分析

@RestController("userSetmealController")

表示该类是一个控制器,并且返回的是 JSON 数据(而不是视图)。

@RequestMapping("/user/setmeal")

该注解指定了类级别的 URL 路径前缀,表示所有方法的路径都以 /user/setmeal 开头

@Autowired

  • @Autowired 注解表示将 SetmealService 注入到该控制器中
list 方法分析

@GetMapping("/list")

@ApiOperation("根据分类id查询套餐")

public Result<List<Setmeal>> list(Long categoryId) {

Setmeal setmeal = new Setmeal();

setmeal.setCategoryId(categoryId);

setmeal.setStatus(StatusConstant.ENABLE); // 只查询启用状态的套餐

List<Setmeal> list = setmealService.list(setmeal);

return Result.success(list);

}

@GetMapping("/list"):该方法用于处理 GET 请求,路径为 /user/setmeal/list,即客户端访问 /user/setmeal/list 时会调用该方法

方法体
  • Setmeal setmeal = new Setmeal();

    • 创建一个新的 Setmeal 对象,用来封装查询条件。
  • setmeal.setCategoryId(categoryId);

    • 设置查询的分类 ID,categoryId 是方法参数,表示需要查询该分类下的套餐。
  • setmeal.setStatus(StatusConstant.ENABLE);

    • 设置套餐的状态为启用(StatusConstant.ENABLE)。这意味着只查询状态为启用的套餐,StatusConstant.ENABLE 是一个常量,通常为 1,表示该套餐处于启用状态。
  • List<Setmeal> list = setmealService.list(setmeal);

    • 调用 setmealService.list(setmeal) 查询符合条件的套餐。list(setmeal) 方法接受一个 Setmeal 对象作为查询条件,查询所有符合该条件的套餐列表。
  • return Result.success(list);

    • 将查询到的套餐列表 list 包装成 Result 对象并返回。Result.success(list) 表示返回一个成功的响应,list 是查询结果

Service

Mapper

id="list" 表示该查询方法的标识符,

parameterType="Setmeal" 表示该查询接受一个 Setmeal 类型的参数。

resultType="Setmeal" 表示查询结果会映射成 Setmeal 类型。

动态 SQL拼接条件来进行实际查询操作

相关推荐
布谷歌2 小时前
开发笔记:如何消除秘钥数据对RPC负荷、日志、系统安全的伤害?
网络·笔记·网络协议·rpc
hkNaruto2 小时前
【AI】AI学习笔记:LangGraph入门 三大典型应用场景与代码示例及MCP、A2A与LangGraph核心对比
人工智能·笔记·学习
专注于大数据技术栈2 小时前
java学习--LinkedHashSet
java·开发语言·学习
kingmax542120082 小时前
北京高一历史上学期期末考情分析与核心知识点精讲(完整版)-吐血整理-全网最全
笔记·学习方法·历史
宵时待雨3 小时前
数据结构(初阶)笔记归纳3:顺序表的应用
c语言·开发语言·数据结构·笔记·算法
智者知已应修善业3 小时前
【C语言 dfs算法 十四届蓝桥杯 D飞机降落问题】2024-4-12
c语言·c++·经验分享·笔记·算法·蓝桥杯·深度优先
九成宫3 小时前
计算机网络期末复习——第4章:网络层 Part Three
网络·笔记·计算机网络·软件工程
副露のmagic3 小时前
更弱智的算法学习 day36
学习·算法
科技林总4 小时前
【系统分析师】3.3 输入输出系统
学习