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

2.04 商品搜索功能实现

根据关键字获取分类查询对应的分页商品信息,并可以价格和销量进行排序切换
在这里插入图片描述

步骤1:mapper.xml编写sql语句

<!-- k: 默认,代表默认排序,根据name-->
<!-- c: 根据销量排序-->
<!-- p: 根据价格排序-->
<select id="searchItems" parameterType="Map" resultType="com.imooc.pojo.vo.SearchItemsVO">SELECTi.id as itemId,i.item_name as itemName,i.sell_counts as sellCounts,ii.url as imgUrl,tempSpec.price_discount as priceFROMitems iLEFT JOINitems_img iioni.id = ii.item_idLEFT JOIN(SELECT item_id,MIN(price_discount) as price_discount from items_spec GROUP BY item_id) tempSpeconi.id = tempSpec.item_idWHEREii.is_main = 1<if test=" paramsMap.keywords != null and paramsMap.keywords != '' ">AND i.item_name like '%${paramsMap.keywords}%'</if>order by<choose><when test=" paramsMap.sort == &quot;c&quot; ">i.sell_counts desc</when><when test=" paramsMap.sort == &quot;p&quot; ">tempSpec.price_discount asc</when><otherwise>i.item_name asc</otherwise></choose>
</select><select id="searchItemsByThirdCat" parameterType="Map" resultType="com.imooc.pojo.vo.SearchItemsVO">SELECTi.id as itemId,i.item_name as itemName,i.sell_counts as sellCounts,ii.url as imgUrl,tempSpec.price_discount as priceFROMitems iLEFT JOINitems_img iioni.id = ii.item_idLEFT JOIN(SELECT item_id,MIN(price_discount) as price_discount from items_spec GROUP BY item_id) tempSpeconi.id = tempSpec.item_idWHEREii.is_main = 1andi.cat_id = #{paramsMap.catId}order by<choose><when test=" paramsMap.sort == &quot;c&quot; ">i.sell_counts desc</when><when test=" paramsMap.sort == &quot;p&quot; ">tempSpec.price_discount asc</when><otherwise>i.item_name asc</otherwise></choose>
</select>

步骤2:创建封装搜索的VO类

/*** 用于展示商品搜索列表结果的VO*/
public class SearchItemsVO {private String itemId;private String itemName;private int sellCounts;private String imgUrl;private int price;
}

步骤3:mapper接口添加对应接口方法

public List<SearchItemsVO> searchItems(@Param("paramsMap") Map<String, Object> map);
public List<SearchItemsVO> searchItemsByThirdCat(@Param("paramsMap") Map<String, Object> map);

步骤4:service接口和实现类

/*** 搜索商品列表* @param keywords* @param sort* @param page* @param pageSize* @return*/
public PagedGridResult searhItems(String keywords, String sort,  Integer page, Integer pageSize);/*** 根据分类id搜索商品列表* @param catId* @param sort* @param page* @param pageSize* @return*/
public PagedGridResult searhItems(Integer catId, String sort, Integer page, Integer pageSize);
@Transactional(propagation = Propagation.SUPPORTS)
@Override
public PagedGridResult searhItems(String keywords, String sort, Integer page, Integer pageSize) {Map<String, Object> map = new HashMap<>();map.put("keywords", keywords);map.put("sort", sort);PageHelper.startPage(page, pageSize);List<SearchItemsVO> list = itemsMapperCustom.searchItems(map);return setterPagedGrid(list, page);
}@Transactional(propagation = Propagation.SUPPORTS)
@Override
public PagedGridResult searhItems(Integer catId, String sort, Integer page, Integer pageSize) {Map<String, Object> map = new HashMap<>();map.put("catId", catId);map.put("sort", sort);PageHelper.startPage(page, pageSize);List<SearchItemsVO> list = itemsMapperCustom.searchItemsByThirdCat(map);return setterPagedGrid(list, page);
}

步骤5:controller对外提供接口

 @ApiOperation(value = "搜索商品列表", notes = "搜索商品列表", httpMethod = "GET")@GetMapping("/search")public JSONResult search(@ApiParam(name = "keywords", value = "关键字", required = true)@RequestParam String keywords,@ApiParam(name = "sort", value = "排序", required = false)@RequestParam String sort,@ApiParam(name = "page", value = "查询下一页的第几页", required = false)@RequestParam Integer page,@ApiParam(name = "pageSize", value = "分页的每一页显示的条数", required = false)@RequestParam Integer pageSize) {if (StringUtils.isBlank(keywords)) {return JSONResult.errorMsg(null);}if (page == null) {page = 1;}if (pageSize == null) {pageSize = PAGE_SIZE;}PagedGridResult grid = itemService.searhItems(keywords,sort,page,pageSize);return JSONResult.ok(grid);}@ApiOperation(value = "通过分类id搜索商品列表", notes = "通过分类id搜索商品列表", httpMethod = "GET")@GetMapping("/catItems")public JSONResult catItems(@ApiParam(name = "catId", value = "三级分类id", required = true)@RequestParam Integer catId,@ApiParam(name = "sort", value = "排序", required = false)@RequestParam String sort,@ApiParam(name = "page", value = "查询下一页的第几页", required = false)@RequestParam Integer page,@ApiParam(name = "pageSize", value = "分页的每一页显示的条数", required = false)@RequestParam Integer pageSize) {if (catId == null) {return JSONResult.errorMsg(null);}if (page == null) {page = 1;}if (pageSize == null) {pageSize = PAGE_SIZE;}PagedGridResult grid = itemService.searhItems(catId,sort,page,pageSize);return JSONResult.ok(grid);}

相关文章:

2.04 商品搜索功能实现

根据关键字获取分类查询对应的分页商品信息&#xff0c;并可以价格和销量进行排序切换 步骤1&#xff1a;mapper.xml编写sql语句 <!-- k: 默认&#xff0c;代表默认排序&#xff0c;根据name--> <!-- c: 根据销量排序--> <!-- p: 根据价格排序--> <sel…...

【SEO基础】百度权重是什么意思及网站关键词应该怎么选?

百度权重是什么意思及网站关键词应该怎么选&#xff1f; 正文共&#xff1a;3253字 20图 预计阅读时间&#xff1a;9分钟 ​ 1.什么是网站权重&#xff1f; 这段时间和一些朋友聊到网站权重以及关键词&#xff0c;发现蛮多人对于这两个概念的认知还是存在一些错误的&#xf…...

Unity实现在3D模型标记

Canvas 模式是UI与3D混合模式&#xff08;Render modelScreen space-Camera) 实现在3D模型标记&#xff0c;旋转跟随是UI不在3D物体下 代码&#xff1a; using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; public clas…...

iOS开发-NotificationServiceExtension实现实时音视频呼叫通知响铃与震动

iOS开发-NotificationServiceExtension实现实时音视频呼叫通知响铃与震动 在之前的开发中&#xff0c;遇到了实时音视频呼叫通知&#xff0c;当App未打开或者App在后台时候&#xff0c;需要通知到用户&#xff0c;用户点击通知栏后是否接入实时音视频的视频或者音频通话。 在…...

性能调试【学习笔记】

什么是调优&#xff1f; 每执行一个Java命令&#xff0c;就分配一个JVM&#xff0c;调优时不要混淆。 根据需求进行JVM规划和预调优优化运行JVM的运行环境&#xff08;慢、卡顿&#xff09;解决JVM运行过程中出现的各种问题&#xff08;内存泄露、内存溢出OOM&#xff09; 生…...

【taro react】---- 获取元素的位置和宽高等信息

1. 需求分析 添加节点的布局位置的查询请求。相对于显示区域&#xff0c;以像素为单位。其功能类似于 DOM 的 getBoundingClientRect。返回 NodesRef 对应的 SelectorQuery。区分小程序和H5的环境&#xff0c;调用 getBoundingClientRect 获取对应的信息。 2. H5 实现 判断传…...

Java【Spring】项目创建、存储和获取 Bean 的基本方式

文章目录 前言一、创建 Spring 项目1, 创建 Maven 项目2, 添加 Spring 依赖3, 创建启动类 二、存储 Bean 的基本方式1, 创建 Bean2, 存储 Bean 三、获取 Bean 的基本方式1, 获取上下文对象2, 获取 Bean3, 使用 Bean 总结 前言 各位读者好, 我是小陈, 这是我的个人主页, 希望我的…...

docker minio安装

1.介绍 Minio是一款开源的对象存储服务&#xff0c;它可以在任何硬件或云平台上提供高性能、高可用性和高安全性的存储解决方案。Minio最新版是2021年11月发布的RELEASE.2021-11-24T23-19-33Z&#xff0c;它带来了以下几个方面的改进和新特性&#xff1a; - 支持S3 Select AP…...

设计模式-命令模式在Java中的使用示例-桌面程序自定义功能键

场景 欲开发一个桌面版应用程序&#xff0c;该应用程序为用户提供了一系列自定义功能键&#xff0c;用户可以通过这些功能键来实现一些快捷操作。 用户可以将功能键和相应功能绑定在一起&#xff0c;还可以根据需要来修改功能键的设置&#xff0c;而且系统在未来可能还会增加…...

分冶算法 剑指 07 重建二叉树 排序算法:剑指45 把数组排成最小的数 10-I 斐波那契数列

来记录几个注意事项 1.vector容器里利用find&#xff08;&#xff09;函数 不同于map&#xff08;map有find方法&#xff09;&#xff0c;vector本身是没有find这一方法&#xff0c;其find是依靠algorithm来实现的。 所以要包含头文件 #include <iostream> #include <…...

Postgresql取消正在执行的任务或强制终止正在执行的任务

Postgresql取消正在执行的任务或强制终止正在执行的任务 要停止 PostgreSQL 数据库中当前正在执行的所有任务&#xff0c;可以使用以下方法&#xff1a; 使用 pg_cancel_backend 函数&#xff1a;连接到 PostgreSQL 数据库&#xff0c;并执行以下命令以停止所有正在执行的任务…...

【Linux】Centos7 的 Systemctl 与 创建系统服务 (shell脚本)

Systemctl systemctl 命令 # 启动 systemctl start NAME.service # 停止 systemctl stop NAME.service # 重启 systemctl restart NAME.service # 查看状态 systemctl status NAME.service # 查看所有激活系统服务 systemctl list-units -t service # 查看所有系统服务 syste…...

Redis集群Cluster搭建

Redis集群Cluster搭建 集群框架1、下载redis2.创建Cluster文件3.修改redis配置文件4.启动redis5.链接各个redis6.分配槽位7.添加从机节点&#xff08;备份Redis&#xff09;8.以集群方式登录9.使用开源Redis可视化客户端链接 集群框架 三个集群节点&#xff0c;每个节点有个副本…...

swing组件应用

1. 组件概述 &#xff08;1&#xff09; 说明 组件组成Java 的图形界面的各个元素&#xff0c;按照不同的功能&#xff0c;可分为 顶层容器、中间容器、基本组件。顶层容器为java.awt.Window的子类&#xff0c;有JFrame、JDialog等。中间容器和基础组件都为javax.swing.JCompo…...

Spring学习记录----十五、面向切面编程AOP+十六、Spring对事务的支持

十五、面向切面编程AOP IoC使软件组件松耦合。AOP让你能够捕捉系统中经常使用的功能&#xff0c;把它转化成组件。 AOP&#xff08;Aspect Oriented Programming&#xff09;&#xff1a;面向切面编程&#xff0c;面向方面编程。&#xff08;AOP是一种编程技术&#xff09; …...

Color Correction (颜色校正)

介绍 在Unity中&#xff0c;Color Correction (颜色校正) 是一种用于调整场景或游戏画面颜色的技术。其中&#xff0c;Curves&#xff08;曲线&#xff09;和Saturation&#xff08;饱和度&#xff09;是常用的Color Correction工具。通过Curves&#xff0c;可以对RGB通道进行…...

Unity-缓存池

一、.基础缓存池实现 继承的Singleton脚本为 public class Singleton<T> where T : new() {private static T _instance;public static T GetIstance(){if (_instance null)_instance new T();return _instance;} } 1.PoolManager using System.Collections; using S…...

ubuntu samba 配置常见问题

samba配置&#xff1a; sudo vi /etc/samba/smb.conf [xxx 共享文件名] comment share folder browseable yes writable yes guest ok yes path /workdir/code/favarite create mask 0777 directory mask 0777 sudo /etc/init.d/smbd restart 重启smb服务 以上操作…...

vue3.3-TinyMCE:TinyMCE富文本编辑器基础使用

一、TinyMCE官网 GitHub - tinymce/tinymce TinyMCE中文文档中文手册 二、官网介绍 TinyMCE是一款易用、且功能强大的所见即所得的富文本编辑器。同类程序有&#xff1a;UEditor、Kindeditor、Simditor、CKEditor、wangEditor、Suneditor、froala等等。 TinyMCE的优势&…...

基于以太坊+IPFS的去中心化数据交易方法及平台

自己的论文&#xff0c;哎费事 目录 基于以太坊IPFS的去中心化数据交易方法及平台 基于以太坊IPFS的去中心化数据交易方法及平台 摘要&#xff1a; 数据交易过程中存在数据权属不明和数据安全问题。本文开发了一种基于以太坊IPFS的去中心化数据交易方法及平台。方法包括&am…...

基于 Vibe Coding 的 OJ 平台

基于 Vibe Coding 的 OJ 平台 Github: https://github.com/wjlwjlwjlwjl-cmd/vibe-coding-based-oj-platform Gitee: https://gitee.com/wangs-joyful-home/vibe-coding-based-oj-platform 一个类 LeetCode 的在线编程评测平台&#xff0c;支持题目管理、代码提交、自动判题、提…...

Android动态调试实战:密钥提取四步法与JEB深度用法

1. 这不是“破解游戏”&#xff0c;而是一场对Android应用安全边界的系统性测绘你有没有遇到过这样的情况&#xff1a;一个内部工具APK&#xff0c;文档里写着“密钥已硬编码在so中”&#xff0c;但反编译Java层完全找不到明文&#xff1b;或者某SDK的初始化方法里反复调用getS…...

DownloadButton与Auto Layout完美结合:适配各种屏幕尺寸的下载按钮布局

DownloadButton与Auto Layout完美结合&#xff1a;适配各种屏幕尺寸的下载按钮布局 【免费下载链接】DownloadButton Customizable App Store style download button 项目地址: https://gitcode.com/gh_mirrors/do/DownloadButton DownloadButton是一款高度可定制的App …...

容器资源限制

1、创建一个临时容器c1 docker run -it --namec1 --rm centos:v1监控容器的资源使用情况 docker statsmemload工具可以直接占用消耗资源 将memload工具拷贝到c1容器的opt目录下 docker cp memload-7.0-1.r29766.x86_64.rpm c1:/opt在运行的容器中安装上传的安装包 rpm -ivh /op…...

3步搞定显卡风扇异常:用FanControl彻底解决NVIDIA风扇噪音和转速问题

3步搞定显卡风扇异常&#xff1a;用FanControl彻底解决NVIDIA风扇噪音和转速问题 【免费下载链接】FanControl.Releases This is the release repository for Fan Control, a highly customizable fan controlling software for Windows. 项目地址: https://gitcode.com/GitH…...

【Typescript】14-高级实战-设计类型安全的-api

高级实战&#xff1a;设计类型安全的 API 如果学完前面的知识&#xff0c;你还只是停留在“我会写几个类型、看得懂一些泛型”&#xff0c;那 TypeScript 其实只学了一半。真正拉开差距的地方&#xff0c;是你能不能把类型系统转化成设计能力&#xff0c;尤其是在 API 设计上。…...

机器学习评价指标之综合指标的关系

综合指标的关系宏平均考虑每个类别的个别表现&#xff0c;并对它们的评价指标&#xff08;比如准确率、召回率等&#xff09;进行平均。每个类别 被视为同等重要&#xff0c;无论类别的大小或样本数量。微平均则关注整体表现&#xff0c;它将所有类别的预测结果合并起来&#x…...

WireUI颜色选择器和日期选择器:提升用户体验的利器 [特殊字符][特殊字符]

WireUI颜色选择器和日期选择器&#xff1a;提升用户体验的利器 &#x1f3a8;&#x1f4c5; 【免费下载链接】wireui TallStack UI components 项目地址: https://gitcode.com/gh_mirrors/wi/wireui WireUI颜色选择器和日期选择器是Laravel Livewire应用中提升用户体验的…...

ElevenLabs支持广西话吗?2024最新实测结果曝光:仅2个API参数决定能否合成地道“梧州腔”

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;ElevenLabs广西话语音支持的现状与背景 ElevenLabs 作为全球领先的AI语音合成平台&#xff0c;目前尚未在官方API文档、语言列表或控制台界面中提供对广西话&#xff08;含南宁白话、梧州话、玉林话等粤…...

终极窗口置顶解决方案:AlwaysOnTop完整使用指南

终极窗口置顶解决方案&#xff1a;AlwaysOnTop完整使用指南 【免费下载链接】AlwaysOnTop Make a Windows application always run on top 项目地址: https://gitcode.com/gh_mirrors/al/AlwaysOnTop 在Windows多任务处理中&#xff0c;窗口遮挡是影响工作效率的主要痛点…...