当前位置: 首页 > 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…...

代码重构的艺术:在业务狂奔中如何优雅地还技术债

业务压力下的质量困局在快节奏的软件开发世界中&#xff0c;业务需求如同永不停歇的浪潮&#xff0c;推动着团队高速前行。为了抢占市场先机、快速响应变化&#xff0c;“先上线&#xff0c;再优化”几乎成了许多项目的默认模式。然而&#xff0c;这种模式背后&#xff0c;是以…...

别再混淆了!一文讲透NvDecoder里ulNumDecodeSurfaces和ulNumOutputSurfaces到底怎么用

深入解析NvDecoder&#xff1a;解码缓存与输出缓存的本质区别与实战配置 在视频处理领域&#xff0c;NVIDIA的硬件解码器&#xff08;NVDEC&#xff09;因其出色的性能和高效的资源利用率而广受开发者青睐。然而&#xff0c;对于许多中高级开发者来说&#xff0c;NvDecoder中ul…...

VMware 16 安装win,Win11推荐下载链接(不要选arm)

目录Win11下载链接待续、更新中......Win11下载链接 ed2k://|file|zh-cn_windows_11_consumer_editions_version_22h2_updated_sep_2022_x64_dvd_23d39103.iso|5579771904|33C7EC6485AD8C55ADFB550FA1A0F270|/ 待续、更新中… 1 顿号、: 先使用ctrl. &#xff0c;再使用一遍切…...

华为OD面试官最爱问的10个Python八股文,我这样答拿到了Offer

华为OD Python面试实战指南&#xff1a;10个高频问题的深度解析与应答策略 面试开场&#xff1a;如何用技术叙事打动面试官 去年冬天&#xff0c;我坐在华为OD的会议室里&#xff0c;手指不自觉地敲击着桌面。面试官推了推眼镜&#xff0c;抛出了第一个Python问题。那一刻我突然…...

从Java到AI Agent:传统后端工程师的下一站,不是学AI,是成为系统工程师!

文章探讨了在AI技术发展的背景下&#xff0c;传统后端工程师的转型方向。作者认为&#xff0c;未来的竞争焦点不再是单纯的技术能力&#xff0c;而是如何将AI技术融入现有系统&#xff0c;构建自动化系统。文章提出了AI Agent工程师的概念&#xff0c;强调系统工程能力的重要性…...

YimMenu:GTA5游戏体验增强工具全攻略

YimMenu&#xff1a;GTA5游戏体验增强工具全攻略 【免费下载链接】YimMenu YimMenu, a GTA V menu protecting against a wide ranges of the public crashes and improving the overall experience. 项目地址: https://gitcode.com/GitHub_Trending/yi/YimMenu 核心痛点…...

零基础入门AI集成:在快马平台编写你的第一个豆包AI对话程序

零基础入门AI集成&#xff1a;在快马平台编写你的第一个豆包AI对话程序 作为一个刚接触AI开发的新手&#xff0c;第一次看到豆包开放平台的API文档时&#xff0c;我完全被各种参数和术语搞晕了。好在发现了InsCode(快马)平台&#xff0c;它让我不用从零开始写代码就能理解整个…...

SoundSwitch音频配置文件深度解析:应用触发和多设备管理的完整指南

SoundSwitch音频配置文件深度解析&#xff1a;应用触发和多设备管理的完整指南 【免费下载链接】SoundSwitch C# application to switch default playing device. Download: https://soundswitch.aaflalo.me/ 项目地址: https://gitcode.com/gh_mirrors/so/SoundSwitch …...

窗口总乱跑?PersistentWindows让你的桌面布局稳如泰山

窗口总乱跑&#xff1f;PersistentWindows让你的桌面布局稳如泰山 【免费下载链接】PersistentWindows fork of http://www.ninjacrab.com/persistent-windows/ with windows 10 update 项目地址: https://gitcode.com/gh_mirrors/pe/PersistentWindows 多显示器用户和远…...

NVIDIA Profile Inspector 终极指南:免费解锁显卡隐藏性能的完整教程

NVIDIA Profile Inspector 终极指南&#xff1a;免费解锁显卡隐藏性能的完整教程 【免费下载链接】nvidiaProfileInspector 项目地址: https://gitcode.com/gh_mirrors/nv/nvidiaProfileInspector 想要让游戏画面更流畅、画质更清晰吗&#xff1f;NVIDIA Profile Inspe…...