zoukankan      html  css  js  c++  java
  • Web核心练习之分页模块和条件模块(后台代码为主,jsp已经落伍)

    分页查询分类:

    逻辑分页(不常用):

    逻辑上进行分页,实际并没有分页操作。
    一次性把所有数据查询出来,但是在展示的时候只显示其中某一部分。

    优点:只需要查询一次数据库,数据展示的速度比较快。

    缺点:非常消耗内存,在数据量比较大的时候有内存溢出的隐患。

    物理分页(推荐,常用)

    在逻辑上进行分页,实际操作时也进行分页。
    查询时就只查某一页的数据。无论数据库表中一共有多少条记录,一次只查其中一页的数据。

    优点:占用的空间是稳定可预期的。不会产生内存溢出的问题。

    缺点:每次查询都需要和数据库进行交互,实现的难度略高。

    sql查询时就需要分页。

    涉及的知识:

    html知识:

    什么是表单?

    表单:


    创建表单:用form标签创建表单区域,form标签属性:action表单提交的数据什么地方处理,method表单以get或post方法把数据内容提交。

    Servlet知识:

    request.getParameter("")方法;



    获得表单

    标签内name=""中变量的值,name是提交表单时,给后台处理程序传递的它们的值。
    request.getParameter("");是后台得到该值的方法。

    JDBC知识:

    query查找:

    jdbcTemplate.queryForObject()参数是什么,返回值是什么?
    参数是(动态sql,封装类型.class,动态sql中的?位置的参数),返回一个封装类型对应类的对象
    还有这种奇葩方式:

    jdbcTemplate.query()参数是什么,返回值是什么?
    参数是(动态sql, new BeanPropertyRowMapper<泛型>(封装类型.class),动态sql中的?位置的参数),返回一个一个封装类型对应类的对象List
    使用BeanPropertyRowMapper将数据库查询结果转换为Java类对象

    数据结构:

    前台->后台

    目标页码 currentPage(为了转换为当前页,所以也叫currentPage)

    页面显示数量 rowspageSize

    后台->前台

    当前页码 currentPage

    页面显示数量 rowspageSize

    总页数 totalPage = Math.ceil(totalCount/rows)

    总数据量 totalCount

    数据列表 list

    为了数据传递和操作方便,我们把上述5个数据封装到一个对象中,起名为PageBean。

    逻辑

    从list.jsp或者从index.jsp开始,给Servlet发送要查询哪一页的信息


    这里还顺便做了选中页码激活

    在Servlet中获取请求参数,把两个参数传给Service

    在Service中,目的就是封装PageBean中的所有数据。

    PagingQueryServlet类调用service包实现类UserServiceImpl中pagingQuery()方法:

    该方法调用了dao.impl包中UserDaoImpl类中findTotalCount()方法和findByEachPage()方法

    层次总览:


    原则:缺什么补什么。

    查询数据库:查询总数据量,查询数据列表
    计算开始索引 = (currentPage - 1) * rows
    在Service中调用DAO方法把需要从数据库获取的数据得出来,在DAO中实现数据库查询的两个方法

    limit m,n;m: 开始索引,n: 查询的数据条数

    把PageBean返回到Servlet中,存入到request域,转发到list.jsp中

    在list.jsp中,使用EL+JSTL回显分页数据

    分页条处理

    1页码最好不要从1遍历到最后一页,自行处理一下开始和结束的页码

    分页条边界值处理

    前台要做有效性校验

    后台也要做有效性校验

    在Service中进行校验:

    条件查询:

    在分页查询的基础上,额外获取查询条件进行sql的拼接。
    如何动态生成sql?
    使用一个恒等式把主体sql中的where关键字给确定下来,然后所有的额外条件只需要拼接and语句即可。
    select * from user where 1=1
    [and name like ?]
    [and address like ?]
    [and email like ?]
    limit ?,?

  • 相关阅读:
    javascript不用正则验证输入的字符串是否为空(包含空格)
    最近真的很忙
    加油吧 骚年QAQ
    发现一个问题:个人博客仅仅存在于有生之年,如何一直保存下去呢?
    day01-html
    day04-jQuery
    Day03-jS
    MySQL-注释-Navicat基本使用-复杂查询练习题-解题思路-pymysql操作数据库-SQL注入-05
    MySQL-复杂查询及条件-起别名-多表查询-04
    MySQ-表关系-外键-修改表结构-复制表-03
  • 原文地址:https://www.cnblogs.com/maomaodesu/p/12109725.html
Copyright © 2011-2022 走看看