失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > 黑马旅游网学习笔记之旅游线路查询(七)

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

时间:2020-01-11 21:49:37

相关推荐

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

概述

(一)参数传递

(二)后台代码

(三)前台代码

(一)参数传递

(二)后台代码

第一步,加上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”字符串

前台代码略

如果觉得《黑马旅游网学习笔记之旅游线路查询(七)》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。