Day18JavaWeb【Travel Project】Back-end code for search and paging***

Code behind search and paging

  • (1) The user enters the route name keywords, and the background returns the data to the foreground
  • (2) Use paging display at the front desk
  • (3) Paging toolbar
  • (4) Pagination list
    Insert picture description here
    Insert picture description here

RouteServiceTest

public class TestRouteService {
    
    
    @Test
    public void test01(){
    
    
        //业务对象
        RouteService  routeService = new RouteService();
        //业务方法 search
        //为什么返回结果不能是一个List<Route>就可以搞定?
        //搜索结果可能是几十万条数据,不显示全部而是按分页来显示
        //分页中需要的数据有 总记录数100 每页记录数20 总页数5 当前1 当前页的集合
        PageBean pageBean =  routeService.search("宁夏",1,20);
        //显示
        System.out.println(pageBean);
    }
}

PageBean

public class PageBean {
    
    
    //总记录数 100
    private int totalCount;
    //每页记录数 20
    private  int pageSize;
    //总页数 5
    private int totalPage;
    //当前页号
    private int currentPage;
    //当前页的数据
    private List<Route> list;

Route

Copy from data

//旅游路线
public class Route {
    
    
    private int rid;//线路id,必输
    private String rname;//线路名称,必输
    private double price;//价格,必输
    private String routeIntroduce;//线路介绍
    private String rflag;   //是否上架,必输,0代表没有上架,1代表是上架
    private String rdate;   //上架时间
    private String isThemeTour;//是否主题旅游,必输,0代表不是,1代表是
    private int count;//收藏数量
    private int cid;//所属分类,必输
    private String rimage;//缩略图
    private int sid;//所属商家
    private String sourceId;//抓取数据的来源id

RouteService

public class RouteService {
    
    
    //搜索功能
    public PageBean search(String keyword, int currentPage, int pageSize) {
    
    
        //创建分页数据对象  包含4个整数与一个集合
        PageBean pb = new PageBean();
        //设置当前页号
        pb.setCurrentPage(currentPage);//1*
        //设置每页记录数
        pb.setPageSize(pageSize);//2
        //设置总记录数
        RouteDao routeDao = MySessionUtils2.getMapper(RouteDao.class);
        //'%长沙%'
        int totalCount = routeDao.findCountByName("%" + keyword + "%");
        pb.setTotalCount(totalCount);//3*

        //设置总页数  每页最多只能放20条   40  2  与 41  3
        //在java中,整数相除只保留整数部,丢失小数部  41/20  就是2
        int totalPage = totalCount % pageSize == 0 ? totalCount / pageSize : totalCount / pageSize + 1;
        pb.setTotalPage(totalPage);//4*

        //设置PageBean中的list集合
        int start = (currentPage - 1) * pageSize;
        List<Route> list = routeDao.findPageByName("%" + keyword + "%", start, pageSize);
        pb.setList(list);
        return pb;
    }
}

RouteDao

public interface RouteDao {
    
    
    //select count(*) from tab_route where rname like '%长沙%';
    int findCountByName(String keyword);

    //select * from tab_route where rname like '%长沙%' limit 0,20;
    List<Route> findPageByName(String keyword, int start, int pageSize);
}

with \ wzx \ dao \ RouteDao.xml

    <!--  List<Route> findPageByName(String keyword, int start, int pageSize); -->
    <select id="findPageByName" resultType="route">
        select * from tab_route where rname like #{arg0} limit #{arg1},#{arg2};
    </select>
    <!-- <select id="findPageByName" resultType="route" >
         select * from tab_route where rname like #{param1} limit #{param2},#{param3};
     </select>
     -->

Core configuration file

    <mappers>
        <mapper resource="com/wzx/dao/UserDao.xml"/>
        <mapper resource="com/wzx/dao/CategoryDao.xml"/>
        <mapper resource="com/wzx/dao/RouteDao.xml"/>
    </mappers>

RouteServlet


@WebServlet("/routeServlet")
public class RouteServlet extends HttpServlet {
    
    
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    
    
            doGet(request,response);
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    
    

        //接收请求,获取参数
        String keyword = request.getParameter("keyword");
        String currentPageStr = request.getParameter("currentPage");
        String pageSizeStr = request.getParameter("pageSize");
        int currentPage = 1;
        if (currentPageStr != null && currentPageStr.length() > 0) {
    
    
            //"11"  "你好"
            try {
    
    
                currentPage = Integer.parseInt(currentPageStr);//11
            } catch (Exception e) {
    
    
                e.printStackTrace();
            }
        }

        int pageSize = 20;
        if (pageSizeStr != null && pageSizeStr.length() > 0) {
    
    
            //"30"  "你好"
            try {
    
    
                pageSize = Integer.parseInt(pageSizeStr);//11
            } catch (Exception e) {
    
    
                e.printStackTrace();
            }
        }
        //处理参数
        RouteService routeService = new RouteService();
        //PageBean pb =  routeService.search("长沙",1,20);
        PageBean pb =  routeService.search(keyword,currentPage,pageSize);

        //响应浏览器
        ResponseInfo info = new ResponseInfo();
        info.setCode(200);
        info.setData(pb);
        String json = new ObjectMapper().writeValueAsString(info);
        response.getWriter().println(json);
    }
}

  • test//http://localhost:8080/lvyou_war_exploded/routeServlet?keyword=%E5%8C%97%E4%BA%AC&currentPage=1&pageSize=20

Multi-parameter transmission of MyBatis

  • (1) Mybatis supports multiple parameter transfer
  • (2)Dao方法
    List findPage(String cid, int start, int pageSize);
  • (3) Mapping file configuration
    can use the sequence number of the parameter to refer to the parameter
  • (4) Example The
    first parameter is represented by arg0 or param1, and the
    second parameter is represented by arg1 or param2, which means that
    arg starts counting from 0, and param starts counting from 1.

Guess you like

Origin blog.csdn.net/u013621398/article/details/108928544