黑马旅游网学习笔记之旅游线路查询(七)
概述
(一)参数传递
(二)后台代码
(三)前台代码
(一)参数传递
(二)后台代码
第一步,加上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”字符串
前台代码略
黑马旅游网学习笔记之旅游线路查询(七)相关推荐
- 黑马旅游网学习笔记之旅游线路详情(八)
概述 (一)需求分析 (二)后台代码 (三)前台代码 (一)需求分析 再来看看数据库的关系 这里使用SQLyog能够清晰看到一对多的关系 (二)后台代码 RouteServlet: /*** 根据id ...
- JavaWeb黑马旅游网-学习笔记09【旅游线路收藏】
Java后端 学习路线 笔记汇总表[黑马程序员] JavaWeb黑马旅游网-学习笔记01[准备工作] JavaWeb黑马旅游网-学习笔记02[注册功能] JavaWeb黑马旅游网-学习笔记03[登陆和 ...
- JavaWeb黑马旅游网-学习笔记08【旅游线路详情】
Java后端 学习路线 笔记汇总表[黑马程序员] JavaWeb黑马旅游网-学习笔记01[准备工作] JavaWeb黑马旅游网-学习笔记02[注册功能] JavaWeb黑马旅游网-学习笔记03[登陆和 ...
- JavaWeb黑马旅游网-学习笔记06【旅游线路分页展示分页展示】
Java后端 学习路线 笔记汇总表[黑马程序员] JavaWeb黑马旅游网-学习笔记01[准备工作] JavaWeb黑马旅游网-学习笔记02[注册功能] JavaWeb黑马旅游网-学习笔记03[登陆和 ...
- JavaWeb黑马旅游网-学习笔记07【旅游线路查询】
Java后端 学习路线 笔记汇总表[黑马程序员] JavaWeb黑马旅游网-学习笔记01[准备工作] JavaWeb黑马旅游网-学习笔记02[注册功能] JavaWeb黑马旅游网-学习笔记03[登陆和 ...
- JavaWeb黑马旅游网-学习笔记05【分类数据展示功能】
Java后端 学习路线 笔记汇总表[黑马程序员] JavaWeb黑马旅游网-学习笔记01[准备工作] JavaWeb黑马旅游网-学习笔记02[注册功能] JavaWeb黑马旅游网-学习笔记03[登陆和 ...
- JavaWeb黑马旅游网-学习笔记04【BaseServlet抽取】
Java后端 学习路线 笔记汇总表[黑马程序员] JavaWeb黑马旅游网-学习笔记01[准备工作] JavaWeb黑马旅游网-学习笔记02[注册功能] JavaWeb黑马旅游网-学习笔记03[登陆和 ...
- JavaWeb黑马旅游网-学习笔记03【登陆和退出功能】
Java后端 学习路线 笔记汇总表[黑马程序员] JavaWeb黑马旅游网-学习笔记01[准备工作] JavaWeb黑马旅游网-学习笔记02[注册功能] JavaWeb黑马旅游网-学习笔记03[登陆和 ...
- JavaWeb黑马旅游网-学习笔记02【注册功能】
Java后端 学习路线 笔记汇总表[黑马程序员] JavaWeb黑马旅游网-学习笔记01[准备工作] JavaWeb黑马旅游网-学习笔记02[注册功能] JavaWeb黑马旅游网-学习笔记03[登陆和 ...
最新文章
- 面试看缘分php,php测试姓名缘分指数
- C#对Excel的样式操作
- WordPress让文本小工具支持简码
- python人工智能方向第三方库_Python进阶-第三方库管理和虚拟环境
- 王道考研 计算机网络8 物理层基本概念 数据通信相关术语
- (计算机组成原理)第二章数据的表示和运算-第一节5:本章习题
- es6 TypedArray视图
- android之camera
- 科技爱好者周刊(第 179 期):AR 技术的打开方式
- 数据库建模 : 概念模型 , 逻辑模型和物理模型
- why-not 和 why 问题简介
- NLP,能辅助法官判案吗? | CCF C³
- ps盖印图层在哪里_盖印图层在哪
- Win10系统文件夹被设为只读,取消Word文件的只读模式
- NATO(北大西洋公约组织)采用ADOBE FLEX作为作战支持系统
- python 函数修饰器 父类_手把手教你学python第十四讲(函数装饰器,super用法和时间处理)...
- iconfont.cn 选择图标生成 scriptUrl 链接
- Stream中map和flatmap的区别,一看就懂
- python查询ip归属地_基于Python的免费IP地址归属地查询
- 区块链让公益更透明安心 | FinTechathon 上园村小红果团队
热门文章
- docx库段落 python_Python-docx添加段落
- 工业通信的开源项目 HslCommunication 介绍
- Scratch软件编程等级考试三级——20200319
- 小白在阿里云云服务器上如何发布自己的网站(建站|详细)...
- 南航TRANS复现: 电容电流前馈+电网电压全前馈_单相LCL并网逆变器仿真
- docsify学习笔记
- Android锁屏(四)
- java eclipse参考文献_java毕设论文参考文献.doc
- proteus中仿真51单片系列之--2位数码管程序
- 安卓创建系统闹铃以及系统日历提醒