回顾

步骤回顾

要进行一次完整的数据库增删改查,我们需要执行以下的步骤:

  1. 获得 URL 的参数
  2. 将参数拼接成 SQL 语句
  3. 访问数据库(省略 MySqlHelper 所做的操作)
  4. 处理数据
  5. Servlet 界面显示返回值

一层 JDBC

MySqlHelper + Servlet(界面)

  1. Servlet 负责接收 URL 参数
  2. 然后将 SQL 语句和参数传递给 MySqlHelper 的方法
  3. MySqlHelper 查询数据库之后处理返回值对象,并合并为 List 对象返回给 Servlet
  4. Servlet 将其转换成 JSON 字符串,输出。

注: 这个版本的 JSON 也不是我们想要输出的样子,因为它没有 data 和 flag 键。

两层 JDBC

MySqlHelper + DAO + Servlet,外加一个 pojo.Result 实体类

DAO = Data Access Object 数据访问层

DAO 保存了 SQL 语句

  1. Servlet 负责接收 URL 参数
  2. 将参数传给对应的 DAO
  3. DAO 拼接参数,调用 MySqlHelper 得到 List 对象
  4. DAO 再把数据返回给 Servlet
  5. Servlet 将数据保存在 Result 实例的 data 成员变量里
  6. Servlet 再将 Result 对象转换为 JSON 字符串,输出。

三层 JDBC

MySqlHelper + DAO + Service + Servlet

Service 业务逻辑层,它将 DAO 返回的数据处理后装进 Result 对象里,返回给 Servlet。

添加一个 service 包,创建的 Service 类名命名方式和 DAO 文件一样:数据库表名Service.java

Service 负责调用 DAO 的方法,所以通常 service 的方法名应该和 DAO 一样,返回值为 Result。代码长这样:

public static Result getCityNames() {
Result result = new Result();
result.setFlag("success");
result.setData(CityDao.getCityNames());
return result;
}

那么 Servlet 里原先两层重复的代码(以下这一段)可以直接简化:

Result result = new Result();
result.setFlag("success");
result.setData(CityDao.getCityNames());

改为这样:

protected void get或post方法(request, response) {
Result result = CityService.getCityNames();
String json = JSON.toJSONString(result);
response.getWriter().append(json);
}