zoukankan      html  css  js  c++  java
  • JAVA基础之JDBC开发、JSTL语法、EL表达式与数据分页

    一、直接使用JDBC开发的问题

    1.当表中的列很多时,需要写很长的SQL语句

    还需要写大量 setXXX() 设置参数语句

    读取数据时还需要写大量setXXXX()设置属性语句

    2.非常容易出错,而且不方便修改

    如:某个字段需要去掉,就需要调整后续序号

    大量时间都花在“搬砖”上面

    而且很容易埋下bug,后期测试和修复时间大大增加!!!

    3.效率很差,质量不高

     

      解决方法:将容易出错,大量繁琐的代码封装起来。

    给程序员提供更加高级APIApplication Programming Interface

    一套完整的,能够解决某个方面问题的API,可以称为框架(framework)、库(library

     

    二、关于JSTL部门语法

    <c:forTokens items =”字符串列表”  delims=”字符串中的分隔符” var = “变量名”

    varStatus =”迭代状态数据对象名”>

          ${s.index}   索引(从0开始)

          ${s.count}   序号(从1开始)

          ${s.current}   当前值   与var相等

          ${s.first}    布尔值   是否是第一项

          ${s.last}     布尔值   是否是最后一项

    </c:forTokens>

     

    varStatus 这个属性在<c:forEach>中也存在

     

    JSTL的下拉列表、单选框、复选框的选中问题

     

    <select>

    <option  value=”3”  ${变量== ?selected:””}>要选中的项</option>

    <option  value=”3”  ${变量 eq?selected:””}>要选中的项</option>

     

    <input type=”radio” value=”3” ${变量==?checked:””}>要选中的项

     

    </select>

     

    三、关于Getter/Setter方法

       如果属性以is开头,Eclipse生成的getter/setter如下

          getter:  isXXX

          setter :  isXXX

    举例:isMaleisAdmin

    isMale()setMale()isAdmin()setAdmin()

    使用EL表达式时,应该写成

    ${obj.male}    ${obj.admin}

    四、EL表达式

    1、语法结构

    ${expression}

    2[ ].运算符

    EL 提供“.“和“[ ]“两种运算符来存取数据。

    当要存取的属性名称中包含一些特殊字符,如 . - 等并非字母或数字的符号,就一定要使用“[ ]“。例如:

    ${ user. My-Name}应当改为${user["My-Name"]}

    如果要动态取值时,就可以用[ ]“来做,而“.“无法做到动态取值。例如:

    ${sessionScope.user[data]}data是一个变量

    3、变量

    EL存取变量数据的方法很简单,例如:${username}。它的意思是取出某一范围中名称为username的变量。

    因为我们并没有指定哪一个范围的username,所以它会依序从PageRequestSessionApplication范围查找。

    假如途中找到username,就直接回传,不再继续找下去,但是假如全部的范围都没有找到时,就回传null

     

     

    五、数据分页

    数据分页的必要性

    1.一次性把所有数据(如果很多的话)从数据库中查出来回给数据带来很大的IO开销,而IO是最慢的操作,结果是数据库并发了大大降低!

     

    2.一次性把大量的数据从数据库传到应用服务器,再从应用服务器传到用户浏览器会大大占用服务器宝贵的带宽资源,导致服务器能够处理请求大大减少!

     

    3.查询和传送大量数据需要时间必然很长,结果导致页面反应速度变慢

    用户体验变差

     

    4.人类可读的数据不超过几十条,传送成百上千条数据没有意义

     

    分页数据的查询

         pageNo  页码(从1开始)

         pageSize 每页条数(默认10条)

     

         能够计算出来任意pageNo对应的数据的起始索引位置

         start =(pageNo-1)*pageSize    -----起始索引位置

         count = pageSize             -----数据条数

     

         MySQL数据库的Limit子句:

           Limit  start,count

    示例:含义是从role这个表中取从索引为0开始的6条数据


     

    六、Pager类的设计

      1. Pager类的职责: 根据pageNototalpageSizeshowPageNos计算pageCountstartend

       这些数据用来支持在页面上显示分页信息和页码:

    如下所示:


       123条数据,第3/13页                   1  2  3 4  5  6  7  8  9

    2.区分哪些数据时传过来的,哪些数据是算出来的

    将传过来的数据当做构造方法的参数

    根据参数的变化频率调整参数的位置(Eclipse重构功能支持)

    将变化频率高的参数放在前面,同时增加构造方法重载,对变化频率低的设置默认值

     

    3.内部类

    如果需要把多个类定义在一个文件中,尤其是这些类都需要public的时候,可以把一个类作为主类,其他类定义在它的内部

       ------内部类

     


    4.自定义异常类

       如果希望通过自定义异常向外部提示错误,则需要让自定义异常类从Throwable继承

     

    自定义异常类从Throwable继承或从Throwable的子类继承

    常用的子类有ExceptionRuntimeException

     

    Exception继承类是受查异常,必须try/catchthrows

    RuntimeException继承的是非受查异常,不必显式地try/catchthrows

    编程时更加自由

     

        使用throw抛出异常

  • 相关阅读:
    写360搜索网页总结
    display和position以及其余标签的使用
    MySQL中的 show index命令
    MySQL中查看索引使用情况
    分布式存储容错原理
    MySQL中通过trace分析优化器跟踪SQL
    MySQL中的 show profile 分析sql
    MySQL 中的 dual表
    Every derived table must have its own alias(sql语句错误解决方法)
    MySQL 中的 explain 语句各字段解释
  • 原文地址:https://www.cnblogs.com/yangxiansen/p/7860040.html
Copyright © 2011-2022 走看看