ssm实现搜索功能_ssm搜索功能实现-程序员宅基地

技术标签: ssm  SSM框架整合  

1.数据库持久层(mapper层)

FoodMapper

List<Food>  findFood(@Param("foodName") String foodName, @Param("foodExplain") String foodExplain, @Param("start") int start, @Param("end") int end);

在这里插入图片描述

FoodMapper.xml

<!--搜索食品功能-->
<!--将查询的结果放在二级缓存中-->
<select id="findFood" useCache="true" resultType="com.neusoft.pojo.Food">
    select * from food
    <where>
        <if test="foodName!=null and foodName!=''">
            and foodName like concat('%',#{foodName},'%')
        </if>
        <if test="foodExplain!=null and foodExplain!=''">
            and foodExplain like concat('%',#{foodExplain},'%')
        </if>
        <if test="start>=0 and end>start">
            and foodPrice between #{start} and #{end}
        </if>

    </where>
</select>

在这里插入图片描述

业务逻辑层(service层)

FoodService接口(因为查询到的结果为分页显示,因此要加上分页需要的参数)

/*获取Food数据,处理分页*/
    public PageInfo<Food> findListBiz(int currPage,int pageSize,String foodName,String foodExplain,int start,int end);

在这里插入图片描述

FoodService实现类

  @Override
    public PageInfo<Food> findListBiz(int currPage, int pageSize, String foodName, String foodExplain, int start, int end) {

//        搜索的所有结果进行调用
        List<Food> findlist = foodMapper.findFood(foodName,foodExplain,start,end);
//        2.创建分页对象
        PageInfo<Food> pageInfo = new PageInfo<Food>( findlist.size(),pageSize);
//        3.开始分页
        pageInfo.doPaging(currPage);//计算每页开始的数据位置

//        4.计算每页的结束位置
        if (currPage==pageInfo.getTotalPages())
            pageInfo.setEnd(findlist.size());
        else
            pageInfo.setEnd(pageInfo.getStart()+pageSize);

        List<Food> foods = findlist.subList(pageInfo.getStart(),pageInfo.getEnd());

        //5.将分页结果存到pageInfo中的list
        pageInfo.setList(foods);

        return pageInfo;
    }

在这里插入图片描述

控制层(Controller层)

FoodController

    @ResponseBody
    @RequestMapping("/searchfun")
//    public PageInfo<Food> searchFoods(@RequestParam("foodName") String foodName,
//                                      @RequestParam("foodExplain") String foodExplain,
//                                      @RequestParam("start") int start,
//                                      @RequestParam("end") int end){

    public PageInfo<Food> searchFoods( int currPage, int pageSize,String foodName,String foodExplain,int start,int end){

        PageInfo<Food> pageInfo = foodService.findListBiz(currPage,pageSize,foodName,foodExplain,start,end);
        return  pageInfo;
    }

在这里插入图片描述

分页工具类

pageInfo

	package com.neusoft.util;
	
	
	/*
	* 分页信息类
	* @Author
	* @Date 2021-8-16
	* */
	
	import com.neusoft.pojo.Food;
	
	import java.util.List;
	
	public class PageInfo<T> {
	
	    private int totalRows;//声明数据库中一共有多少条记录
	
	    private int totalPages;//一共能分多少页
	
	    private int pageSize;//每页显示多少条记录
	
	    private int currentPage = 1;//当前页,前端是第几页,后端就是第几页。需要接收前端数据
	
	    private int start;//每页开始的位置
	
	    private int end;//每页结束的位置
	
	    private List<T> list; //每页展示所需展示的数据
	
	    //构造方法
	    public PageInfo(int totalRows,int pageSize){
	        this.totalRows=totalRows;
	        this.pageSize=pageSize;
	
	        //一共能分出多少页
	        if (this.totalRows%this.pageSize==0){
	            this.totalPages=this.totalRows/this.pageSize;
	        }else {
	            this.totalPages=this.totalRows/this.pageSize+1;
	        }
	    }
	
	    //分页逻辑
	    public void doPaging(int reqPage){
	        this.currentPage=reqPage;
	        //计算开始和结束的位置
	        this.start= (this.currentPage-1)*this.pageSize;
	    }
	
	
	    public int getTotalRows() {
	        return totalRows;
	    }
	
	    public void setTotalRows(int totalRows) {
	        this.totalRows = totalRows;
	    }
	
	    public int getTotalPages() {
	        return totalPages;
	    }
	
	    public void setTotalPages(int totalPages) {
	        this.totalPages = totalPages;
	    }
	
	    public int getPageSize() {
	        return pageSize;
	    }
	
	    public void setPageSize(int pageSize) {
	        this.pageSize = pageSize;
	    }
	
	    public int getCurrentPage() {
	        return currentPage;
	    }
	
	    public void setCurrentPage(int currentPage) {
	        this.currentPage = currentPage;
	    }
	
	    public int getStart() {
	        return start;
	    }
	
	    public void setStart(int start) {
	        this.start = start;
	    }
	
	    public int getEnd() {
	        return end;
	    }
	
	    public void setEnd(int end) {
	        this.end = end;
	    }
	
	    public List<T> getList() {
	        return list;
	    }
	
	    public void setList(List<T> list) {
	        this.list = list;
	    }
	}

前端显示(vue代码)

方法:

searchFun(){
				let that = this
				this.$axios({
					methods:'post',
					url:'http://localhost:8888/proSSM/food/searchfun?currPage='+that.currentPage+'&pageSize='+that.pageSize+'&'+that.$qs.stringify(that.searchFood)
				}).then(function(response){
					//一共分了多少页
					that.totalPages=response.data.totalPages
					that.currentPage=response.data.currentPage
					that.food=response.data.list
				})
			},

显示表单

		<el-form label-width="80px" :model="searchFood">
		<el-row>
			<el-col :span="5"><el-form-item label="食物名称">
				<el-input v-model="searchFood.foodName"></el-input>
			</el-form-item></el-col>
			<el-col :span="5"><el-form-item label="食物简介">
				<el-input v-model="searchFood.foodExplain"></el-input>
			</el-form-item></el-col>
			<el-col :span="5"><el-form-item label="价格区间">
				<el-input type="number" v-model="searchFood.start"></el-input>
			<!-- -
				<el-input v-model="searchFood.end"></el-input> -->
			</el-form-item></el-col>
			<el-col :span="0.5" style="margin: 25px;">-</el-col>
			<el-col :span="5"><el-form-item >
			<!-- 	<el-input v-model="searchFood.start"></el-input>
			- -->
				<el-input type="number" v-model="searchFood.end"></el-input>
			</el-form-item></el-col>
			<el-col :span="3.5"><el-button @click="searchFun()">搜索</el-button></el-col>
		</el-row>

用到的数据

		searchFood:{
							foodName:'',
							foodExplain:'',
							start:0,
							end:0
						},
			pageSize:3,
			currentPage:1,
			food:[]
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/Silly011/article/details/119776808

智能推荐

计算机科学与技术本科人才培养目标,计算机科学与技术本科人才培养探索-程序员宅基地

文章浏览阅读199次。[摘要]信息技术发展日新月异,高校计算机专业教育重知识轻实践的人才培养观念与培养模式亟待改革。积极致力于计算机科学与技术本科专业创新应用型人才培养的探索与实践,在“厚基础、宽口径、重实践、求创新”的教育理念指导下,改革培养模式、优化课程体系、夯实教学团队、强化实践环节,打造一支教学科研能力强、结构合理的高水平师资队伍,构建较为科学的人才培养模式和课程体系,培养一批综合素质和核心竞争力强的创新应用型..._探索建立“厚基础、重实践、能创新、擅实战”的高端应用型人才培养模式

node.js和php对比之下,前端人员学那个更好?_nodejs代替php-程序员宅基地

文章浏览阅读2.8k次,点赞4次,收藏4次。浅谈nodejs和php现在,Web开发公司和开发人员可以选择多种技术栈来构建Web应用程序。早期网络发展,不同的技术被用于前端和后端开发。但是,随着Node.js的发布,布局发生了变化,因为它允许开发人员使用 JavaScript 编写后端代码。这最终催生了MEAN(MongoDB + Express +AngularJS + NodeJS )堆栈 web 开发框架,从前端到后端甚至是数据库(MongoDB -JSON)都使用 JavaScript。在 Node.js 之前,Web 开发通常是在 PHP_nodejs代替php

微信小程序云开发云函数总结_c# wx.cloud.init-程序员宅基地

文章浏览阅读2.6k次,点赞5次,收藏24次。1、小程序创建项目时选择云开2、创建进入小程序后选择云开在设置中创建配置环境在小程序中cloudfunctions文件下选择创建的环境并创建nodejs云函数,在每个云函数下的index.js中进行编译3、login云函数创建项目后自动生成只需要上传部署就行4、新增数据云函数// 云函数入口文件const cloud = require('wx-server-sdk')..._c# wx.cloud.init

将centos7打造成桌面系统centos-程序员宅基地

文章浏览阅读3.5k次。2019独角兽企业重金招聘Python工程师标准>>> ..._centos7 palemoon

理解PHP及Zend Engine的线程安全模型(ZTS)_php zts 哪里定义的-程序员宅基地

文章浏览阅读3.3k次,点赞3次,收藏6次。在阅读PHP源码和学习PHP扩展开发的过程中,我接触到大量含有“TSRM”字眼的宏。在查找资料过程中发现有2篇文章写的不错,整理如下:深入研究PHP及Zend Engine的线程安全模型:http://blog.codinglabs.org/articles/zend-thread-safety.htmlPHP源码分析之线程安全模型:http://blog.csdn.net/h_php zts 哪里定义的

详解oracle delete和truncate的区别_delete rollba-程序员宅基地

文章浏览阅读185次。语法 delete from aa truncate table aa 区别 1.delete from后面可以写条件,truncate不可以。2.delete from记录是一条条删的,所删除的每行记录都会进日志,而truncate一次性删掉整个页,因此日至里面只记录页释放,简言之,delete from更新日志,truncate基本不,所用的事务日志空间较少。3.delete from_delete rollba

随便推点

Captcha must be filled out解决_captcha must be filled out.-程序员宅基地

文章浏览阅读1.4w次,点赞30次,收藏36次。今天注册kaggle时发现没有显示人机验证的选项,而是Captcha must be filled out的红字。然后就去网上搜索,找了一番之后终于解决。保存之后去规则列表查看可以检查是否成功,成功的应该是有上面三条的。就是这样的,因为前面下载过了所以显示覆盖已有,之前没有下载过会显示 添加。然后关闭这个页面,在kaggle注册页面刷新就可以出现人机验证了。不过我搜索第二个没有成功,搜索第一个成功的。_captcha must be filled out.

Python3:《机器学习实战》之支持向量机(4)核函数及其实现_头歌机器学习支持向量机第四关核函数-程序员宅基地

文章浏览阅读1w次,点赞9次,收藏44次。Python3:《机器学习实战》之支持向量机(4)核函数及其实现转载请注明作者和出处:http://blog.csdn.net/u011475210代码地址:https://github.com/WordZzzz/ML/tree/master/Ch06操作系统:WINDOWS 10软件版本:python-3.6.2-amd64编  者:WordZzzz_头歌机器学习支持向量机第四关核函数

live555: The input frame data was too large for our buffer size 解决方法_multiframedrtpsink::aftergettingframe1(): the inpu-程序员宅基地

文章浏览阅读7.1k次。在做live555 直播的时候,输入的图片尺寸是320*240 的时候,live555 输出的RTSP数据流可以正常解码,运行没有出现异常现象,但是把图片尺寸改为640*480的时候,就出现了问题: MultiFramedRTPSink::afterGettingFrame1(): The input frame data was too large for our buffer ..._multiframedrtpsink::aftergettingframe1(): the input frame data was too large

java RMI 技术介绍和实践_rmi请求-程序员宅基地

文章浏览阅读214次。RMI 基本思想是远程方法调用,即客户端调用某个方法,其本质是将这个方法的调用请求,发送给服务器,由服务器代为执行,且,服务器将执行结果回送客户端。对于客户端而言,RMI 只要求客户端针对方法本身,产生一种错觉:方法是在本地被调用的;对于服务器而言,RMI 相当于要处理一个来自客户端的“请求”;这个请求针对某个方法。_rmi请求

JVM对象实例化过程_jvm中对象的实例化过程-程序员宅基地

文章浏览阅读1.6k次。JVM对象的实例化从字节码文件看创建对象的过程判断对象对应的类是否加载、链接、初始化虚拟机遇到一条new指令,首先去检查这个指令的参数能否在Metaspace的常量池中定位到一个类的符号引用,并且检查这个符号引用代表的类是否已经被加载、解析和初始化。如果没有,那么在双亲委派模式下,使用当前类加载器已ClassLoader+包名+类名为Key进行查找对应的.class文件。如果没有找到文件,则抛出ClassNotFoundException异常,如果找到,则进行类加载,并生成对应的Class类对象_jvm中对象的实例化过程

XAMPP 安装_xampp fake sendmail-程序员宅基地

文章浏览阅读687次。XAMPP是一个易于安装且包含MySQL、PHP和Perl的建站集成软件包。XAMPP中文版软件操作简单,功能强大,我们只需要在本站下载解压后就可以安装使用。XAMPP软件支持不同的版本以及语言,帮助大家快速简便的建立服务器。华军软件园为您提供xampp中文版官方下载。xampp中文版软件特色  XAMPP此版本由phpStudy作者重新编译,精简掉五分之四,安装包只有35M。..._xampp fake sendmail