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抛出异常

原文地址:https://www.cnblogs.com/yangxiansen/p/7860040.html