欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2022-04-03 19:50:41
...

概述

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

(一)参数传递

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

(二)后台代码

第一步,加上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;//类别的id
        if (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
     */
    @Override
    public PageBean<Route> pageQuery(int cid, int currentPage, int pageSize, String rname) {
        //封装PageBean
        PageBean<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);
        //设置总页数(总页数 = 总记录数 / 每页显示条数)注意判断能否除得尽,如果除不尽就加1
        int 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
     */
    @Override
    public 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为查询结果返回的数量
     */
    @Override
    public 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”字符串
黑马旅游网学习笔记之旅游线路查询(七)
前台代码略

相关标签: 黑马旅游网