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

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

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

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

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

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

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

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

3.效率很差,质量不高

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

给程序员提供更加高级API(Application 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

举例:isMale、isAdmin

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,所以它会依序从Page、Request、Session、Application范围查找。

假如途中找到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类的职责: 根据pageNo、total、pageSize、showPageNos计算pageCount、start、end

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

如下所示:

页/共13页
                  1  2   4  5  6  7  8  9

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

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

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

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

3.内部类

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

------内部类

4.自定义异常类

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

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

常用的子类有Exception、RuntimeException

从Exception继承类是受查异常,必须try/catch或throws

从RuntimeException继承的是非受查异常,不必显式地try/catch或throws

编程时更加自由

使用throw抛出异常

JAVA基础之JDBC开发、JSTL语法、EL表达式与数据分页的更多相关文章

  1. java基础(11) -JDBC

    java基础(11) -JDBC jdbc 1.装载驱动 载入跟数据库建立连接的驱动 /* sql server: String className ="com.microsoft.sqls ...

  2. 【转】JSP中的JSTL与EL表达式用法及区别

    对于JSTL和EL之间的关系,这个问题对于初学JSP的朋友来说,估计是个问题,下面来详细介绍一下JSTL和EL表达式他们之间的关系,以及JSTL和EL一些相关概念! EL相关概念JSTL一般要配合EL ...

  3. jsp中的JSTL与EL表达式用法及区别

    对于JSTL和EL之间的关系,这个问题对于初学JSP的朋友来说,估计是个问题,下面来详细介绍一下JSTL和EL表达式他们之间的关系,以及JSTL和EL一些相关概念! EL相关概念 JSTL一般要配合E ...

  4. jstl,el表达式

    在上一篇中,我们写了将数据传到jsp页面,在jsp页面进行展示数组,但是我们发现,在jsp页面写代码是一件很烦的事,一个循环要拆成两部分,例如for循环,在例如if语句: <%int a=22; ...

  5. JSTL与EL表达式(为空判断)

    JSTL与EL表达式(为空判断) 一.循环遍历集合  1.在jsp中引入标准函数声明  <%@ taglib uri="http://java.sun.com/jsp/jstl/cor ...

  6. EL表达式获取数据

    EL 全名为Expression Language. EL主要作用 获取数据: •EL表达式主要用于替换JSP页面中的脚本表达式,以从各种类型的web域 中检索java对象.获取数据.(某个web域 ...

  7. EL表达式读取数据(在Map,javaBean,List)

    <%@page import="cn.hncu.domain.User"%><!--这里是进行导包--><%@ page language=" ...

  8. 一、jsp和Servlet基础理论及jstl和EL表达式用法

    1.题外话:使用JSP有近一年半的时间了,但是开发量不大.昨天部门突然让做个读取EXCLE文件,然后在前台页面进行展示.并通过点击查看按钮可以对每条明细记录进行跳转后进行详情查看,并按照页面原型进行页 ...

  9. Java基础一(开发环境、注释、关键字、标识符、数据)

    1.Java开发环境搭建2.HelloWorld案例3.注释.关键字.标识符4.数据(数据类型.常量) ###01java语言概述 * A: java语言概述 * a: Java是sun公司开发的一门 ...

随机推荐

  1. Atitit.软件仪表盘(0)--软件的子系统体系说明

    Atitit.软件仪表盘(0)--软件的子系统体系说明 1. 温度检测报警子系统 2. Os子系统 3. Vm子系统 4. Platform,业务系统子系统 5. Db数据库子系统 6. 通讯子系统 ...

  2. CM本地Yum源的搭建

    CM本地Yum源的搭建 以本地yum源安装CM5为例,解释本地yum源的安装和利用本地yum源安装CM5. Cloudera Manager 5(以下简称CM)默认采用在线安装的方式,给不能联互联网或 ...

  3. jquery 怎么触发select的change事件

    可以使用jQuery的trigger() 方法来响应事件 定义和用法 trigger() 方法触发被选元素的指定事件类型. 语法 $(selector).trigger(event,[param1,p ...

  4. a标签去掉下划线

    转载自:http://jingyan.baidu.com/article/a17d52853095838099c8f24e.html <a>是默认有下划线的.所以有时候为了美观,我们需要去 ...

  5. php服务器环境变量

    可以把一些配置写到apache或nginx的配置里,然后在代码里判断环境变量来实现开发环境和线上环境的切换. 比如在本地可以 SetEnv APP_ENV local线上则 SetEnv APP_EN ...

  6. [开机启动]Linux开机自启和运行级别

    嵌入式系统中程序自启动方法 在很多嵌入式系统中,由于可用资源较少,常常在系统启动后就直接让应用程序自动启动,以减少用户操作和节省资源.如何让自己的应用程序自动启动呢?    在Linux系统中,配置应 ...

  7. Memcache内存分配策略

    一.Memcache内存分配机制 关于这个机制网上有很多解释的,我个人的总结如下. Page为内存分配的最小单位. Memcached的内存分配以page为单位,默认情况下一个page是1M,可以通过 ...

  8. &quot;crsctl check crs&quot; command hangs at EVMD check

     Pre-11gR2: "crsctl check crs" command hangs at EVMD check (文档 ID 1578875.1) APPLIES TO: ...

  9. etl工具,kettle实现循环

    Kettle是一款国外开源的ETL工具,纯Java编写,可以在Window.Linux.Unix上运行,绿色无需安装,数据抽取高效稳定. 业务模型: 在关系型数据库中有张很大的数据存储表,被设计成奇偶 ...

  10. opencv 摄像头人脸检测

    PYTHON ubuntu16.04 默认安装的Python版本2.7.12,当用pip install opencv-python 安装了opencv for python 3.3.0.10后,运行 ...