🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
[TOC] ## 问题01:三层架构 ![](https://img.kancloud.cn/6e/86/6e864082bc451049a7efbcefca8e3711_1115x181.png) ## 问题02:DAO设计模式 ![](https://img.kancloud.cn/40/a6/40a643ffc975de9d8f5cd4f21a2a6917_1092x415.png) > 数据访问对象模式(Data Access Object Pattern)或 DAO 模式用于把低级的数据访问 API 或操作从高级的业务服务中分离出来。 ## 问题03:程序结构示意图 ![](https://img.kancloud.cn/17/76/1776f85b054148d598c627e5c787cf53_1105x328.png) ## 问题04:设计公共DAO接口 ``` public interface GenericDAO<E,PK extends Serializable> { public boolean insert (E data); public boolean delete(PK id); public boolean update(PK id, E data); public ArrayList<E> selectAll(); public E select(PK id); } ``` ## 问题05:设计POJO的DAO接口与实现类 ``` public class User { private String username; private String password; …… ``` ``` import cn.pzhu.bean.User; public interface UserDAO extends GenericDAO<User, String>{ } ``` ## 问题06:设计业务层接口以及实现类 ### 业务层接口 针对业务进行接口设计:参数列表和返回值 ### 业务层实现 * 依赖于DAO层 * 实现业务功能 ## 问题07:实现DAO层 ### 1. 获得连接 ``` Connection connection = JDBCUtil.getConnection(); ``` ### 2. 实现CRUD * [ ] 获得连接 * [ ] 编写SQL * [ ] 创建命令 * [ ] 执行命令 * [ ] 处理结果 * 返回T * 返回List<T> * 返回int或boolean * [ ] 释放资源 ## 问题08:实现业务层 ### 1. 获得DAO对象 ``` UserDAO dao = new UserDAOImp(); XXXDAO dao = new XXXDAOImp(); ``` ### 2. 实现业务 * 返回boolean * 返回更加详细的信息 * 返回所需数据List > * 以“用户注册”为例,业务只需要知道是否注册成功,失败的原因(一个业务) > * DAO层需要先进行查询,然后再进行插入(两个操作) ## 问题09:实现表现层 ### 1. 设计JSP页面 > 以“用户注册”为例 ### 2. 设计Servlet控制器 ``` PrintWriter out = response.getWriter(); String username = request.getParameter("username"); String password = request.getParameter("password"); Message msg = userService.regist(new User(username,password)); if (msg.isSuccess()) { out.println("<script>alert('"+msg.getMsg()+"!');" + "window.location.href='index.jsp'</script>"); } else { out.println("<script>alert('"+msg.getMsg()+"!');" + "window.location.href='regist.jsp'</script>"); } ``` ### 3. 功能测试