概述

(一)参数传递
(二)后台代码
(三)前台代码

(一)参数传递



(二)后台代码

第一步,加上rname字段


然后分三种情况:
第一种,直接在首页查询  只有rname 没有cid
第二种,进去之后在搜索框搜索 有rname和cid
第三种,进去之后不搜索 只有cid 没有rname
我们可以写一个sql的模板,应对以上三种情况

RouteServlet:

package cn.itcast.travel.web.servlet;import cn.itcast.travel.domain.PageBean;
import cn.itcast.travel.domain.Route;
import cn.itcast.travel.service.RouteService;
import cn.itcast.travel.service.impl.RouteServiceImpl;import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;@WebServlet("/route/*")
public class RouteServlet extends BaseServlet {private RouteService routeService = new RouteServiceImpl();/*** 分页查询** @param request* @param response* @throws ServletException* @throws IOException*/public void pageQuery(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//1.接受参数String currentPageStr = request.getParameter("currentPage");String pageSizeStr = request.getParameter("pageSize");String cidStr = request.getParameter("cid");//接受rname 线路名称String rname = request.getParameter("rname");//2.处理参数int cid = 0;//类别的idif (cidStr != null && cidStr.length() > 0) {cid = Integer.parseInt(cidStr);}int currentPage = 0;//当前页码if (currentPageStr != null && currentPageStr.length() > 0) {currentPage = Integer.parseInt(currentPageStr);} else {currentPage = 1;//如果不传递,则默认为第一页}int pageSize = 0;//每页显示条数if (pageSizeStr != null && pageSizeStr.length() > 0) {pageSize = Integer.parseInt(pageSizeStr);} else {pageSize = 5;//如果不传递,则默认一页显示5条记录}//3. 调用service查询PageBean对象PageBean<Route> pb = routeService.pageQuery(cid, currentPage, pageSize, rname);//4. 将pageBean对象序列化为json,返回writeValue(pb, response);}}

RouteServiceImpl:

package cn.itcast.travel.service.impl;import cn.itcast.travel.dao.RouteDao;
import cn.itcast.travel.dao.impl.RouteDaoImpl;
import cn.itcast.travel.domain.PageBean;
import cn.itcast.travel.domain.Route;
import cn.itcast.travel.service.RouteService;import java.util.List;public class RouteServiceImpl implements RouteService {private RouteDao routeDao = new RouteDaoImpl();/*** 分页查询* 根据cid,start,pageSize查询当前页的数据集合* start为查询结果的索引值(默认从0开始)* pageSize为查询结果返回的数量** @param cid* @param currentPage* @param pageSize* @return*/@Overridepublic PageBean<Route> pageQuery(int cid, int currentPage, int pageSize, String rname) {//封装PageBeanPageBean<Route> pb = new PageBean<Route>();//设置当前页码pb.setCurrentPage(currentPage);//设置每页显示条数pb.setPageSize(pageSize);//设置总记录数int totalCount = routeDao.findTotalCount(cid, rname);pb.setTotalCount(totalCount);//设置当前页显示的数据集合int start = (currentPage - 1) * pageSize;//开始的记录数(已知当前处于第几页,一页显示多少条)  公式:(当前页码 - 1)* 每页显示的记录数List<Route> list = routeDao.findByPage(cid, start, pageSize, rname);pb.setList(list);//设置总页数(总页数 = 总记录数 / 每页显示条数)注意判断能否除得尽,如果除不尽就加1int totalPage = totalCount % pageSize == 0 ? totalCount / pageSize : (totalCount / pageSize) + 1;pb.setTotalPage(totalPage);return pb;}
}

RouteDaoImpl:

package cn.itcast.travel.dao.impl;import cn.itcast.travel.dao.RouteDao;
import cn.itcast.travel.domain.Route;
import cn.itcast.travel.util.JDBCUtils;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;import java.util.ArrayList;
import java.util.List;public class RouteDaoImpl implements RouteDao {private JdbcTemplate template = new JdbcTemplate(JDBCUtils.getDataSource());/*** 根据cid查询总记录数** @param cid* @return*/@Overridepublic int findTotalCount(int cid, String rname) {//1.定义sql模板String sql = "select count(*) from tab_route where 1=1 ";StringBuilder sb = new StringBuilder(sql);List params = new ArrayList();//条件们//2.判断参数是否有值if (cid != 0) {sb.append(" and cid = ?");//要注意空格params.add(cid);//添加?对应的值}if (rname != null && rname.length() > 0) {sb.append(" and rname like ?");params.add("%" + rname + "%");}sql = sb.toString();return template.queryForObject(sql, Integer.class, params.toArray());}/*** 根据cid,start,pageSize查询当前页的数据集合* start为查询结果的索引值(默认从0开始)* pageSize为查询结果返回的数量*/@Overridepublic List<Route> findByPage(int cid, int start, int pageSize, String rname) {String sql = "select * from tab_route where 1=1 ";StringBuilder sb = new StringBuilder(sql);List params = new ArrayList();//条件们//2.判断参数是否有值if (cid != 0) {sb.append(" and cid = ?");//要注意空格params.add(cid);//添加?对应的值}if (rname != null && rname.length() > 0) {sb.append(" and rname like ?");params.add("%" + rname + "%");}sb.append(" limit ? , ? ");//分页条件sql = sb.toString();params.add(start);params.add(pageSize);return template.query(sql, new BeanPropertyRowMapper<Route>(Route.class), params.toArray());}
}

我们测试发现使用tomcat7的话,get请求中文会乱码
访问:http://localhost/travel/route/pageQuery?cid=5&rname=西安
设置断点,然后step over

解决方法:

rname = new String(rname.getBytes("iso-8859-1"), "utf-8");

如果不这样解决,也可以换成tomcat8
效果:

(三)前台代码

后台加多一个条件,因为前台可能会传一个“null”字符串

前台代码略

黑马旅游网学习笔记之旅游线路查询(七)相关推荐

  1. 黑马旅游网学习笔记之旅游线路详情(八)

    概述 (一)需求分析 (二)后台代码 (三)前台代码 (一)需求分析 再来看看数据库的关系 这里使用SQLyog能够清晰看到一对多的关系 (二)后台代码 RouteServlet: /*** 根据id ...

  2. JavaWeb黑马旅游网-学习笔记09【旅游线路收藏】

    Java后端 学习路线 笔记汇总表[黑马程序员] JavaWeb黑马旅游网-学习笔记01[准备工作] JavaWeb黑马旅游网-学习笔记02[注册功能] JavaWeb黑马旅游网-学习笔记03[登陆和 ...

  3. JavaWeb黑马旅游网-学习笔记08【旅游线路详情】

    Java后端 学习路线 笔记汇总表[黑马程序员] JavaWeb黑马旅游网-学习笔记01[准备工作] JavaWeb黑马旅游网-学习笔记02[注册功能] JavaWeb黑马旅游网-学习笔记03[登陆和 ...

  4. JavaWeb黑马旅游网-学习笔记06【旅游线路分页展示分页展示】

    Java后端 学习路线 笔记汇总表[黑马程序员] JavaWeb黑马旅游网-学习笔记01[准备工作] JavaWeb黑马旅游网-学习笔记02[注册功能] JavaWeb黑马旅游网-学习笔记03[登陆和 ...

  5. JavaWeb黑马旅游网-学习笔记07【旅游线路查询】

    Java后端 学习路线 笔记汇总表[黑马程序员] JavaWeb黑马旅游网-学习笔记01[准备工作] JavaWeb黑马旅游网-学习笔记02[注册功能] JavaWeb黑马旅游网-学习笔记03[登陆和 ...

  6. JavaWeb黑马旅游网-学习笔记05【分类数据展示功能】

    Java后端 学习路线 笔记汇总表[黑马程序员] JavaWeb黑马旅游网-学习笔记01[准备工作] JavaWeb黑马旅游网-学习笔记02[注册功能] JavaWeb黑马旅游网-学习笔记03[登陆和 ...

  7. JavaWeb黑马旅游网-学习笔记04【BaseServlet抽取】

    Java后端 学习路线 笔记汇总表[黑马程序员] JavaWeb黑马旅游网-学习笔记01[准备工作] JavaWeb黑马旅游网-学习笔记02[注册功能] JavaWeb黑马旅游网-学习笔记03[登陆和 ...

  8. JavaWeb黑马旅游网-学习笔记03【登陆和退出功能】

    Java后端 学习路线 笔记汇总表[黑马程序员] JavaWeb黑马旅游网-学习笔记01[准备工作] JavaWeb黑马旅游网-学习笔记02[注册功能] JavaWeb黑马旅游网-学习笔记03[登陆和 ...

  9. JavaWeb黑马旅游网-学习笔记02【注册功能】

    Java后端 学习路线 笔记汇总表[黑马程序员] JavaWeb黑马旅游网-学习笔记01[准备工作] JavaWeb黑马旅游网-学习笔记02[注册功能] JavaWeb黑马旅游网-学习笔记03[登陆和 ...

最新文章

  1. 面试看缘分php,php测试姓名缘分指数
  2. C#对Excel的样式操作
  3. WordPress让文本小工具支持简码
  4. python人工智能方向第三方库_Python进阶-第三方库管理和虚拟环境
  5. 王道考研 计算机网络8 物理层基本概念 数据通信相关术语
  6. (计算机组成原理)第二章数据的表示和运算-第一节5:本章习题
  7. es6 TypedArray视图
  8. android之camera
  9. 科技爱好者周刊(第 179 期):AR 技术的打开方式
  10. 数据库建模 : 概念模型 , 逻辑模型和物理模型
  11. why-not 和 why 问题简介
  12. NLP,能辅助法官判案吗? | CCF C³
  13. ps盖印图层在哪里_盖印图层在哪
  14. Win10系统文件夹被设为只读,取消Word文件的只读模式
  15. NATO(北大西洋公约组织)采用ADOBE FLEX作为作战支持系统
  16. python 函数修饰器 父类_手把手教你学python第十四讲(函数装饰器,super用法和时间处理)...
  17. iconfont.cn 选择图标生成 scriptUrl 链接
  18. Stream中map和flatmap的区别,一看就懂
  19. python查询ip归属地_基于Python的免费IP地址归属地查询
  20. 区块链让公益更透明安心 | FinTechathon 上园村小红果团队

热门文章

  1. docx库段落 python_Python-docx添加段落
  2. 工业通信的开源项目 HslCommunication 介绍
  3. Scratch软件编程等级考试三级——20200319
  4. 小白在阿里云云服务器上如何发布自己的网站(建站|详细)...
  5. 南航TRANS复现: 电容电流前馈+电网电压全前馈_单相LCL并网逆变器仿真
  6. docsify学习笔记
  7. Android锁屏(四)
  8. java eclipse参考文献_java毕设论文参考文献.doc
  9. proteus中仿真51单片系列之--2位数码管程序
  10. 安卓创建系统闹铃以及系统日历提醒