三层架构
三层架构字面意思就是一个结构由三层来组件构造而成,在外面程序员里面理解就是A-->B---C也就是我们很熟溪的dao方法与主界面
在以前我们都是直接从界面调用dao方法,其实这样是不严谨的,也就是A直接到C,而今天呢我们就要在中间插入一个B层
下面我们以登录页面为例子
底层代码
<body> <form action="dologin.jsp" method="post"> 用户名:<input type="text" name="iname"><br> 密码:<input type="password" name="ipwd"><br> <input type="submit" value="登录"> <input type="reset" value="清空"> </form> </body>
这里实体类就不展示出来了
像以前我们就是直接写一个dao方法类来进行使用,现在我们利用三层架构写一个接口来封装方法 类名IUserDao
//只做设计 不做实现 /** * 查询全部 * @return 用户集合 */ public List<User> getAll(); /** * 模糊查询 * @param colName 列名 * @param str 关键字 * @return 用户集合 */ public List<User> getAll(String colName,String str); /** * 根据用户id查询 * @param uuid 编号 * @return 用户对象 */ public User getUser(int uuid); /** * 增加用户 * @param u 用户对象 * @return 影响行数 */ public int addUser(User u); /** * 根据id删除用户 * @param uuid 用户编号 * @return 影响行数 */ public int deleteUser(int uuid); /** * 根据id修改用户 * @param u 用户对象 * @param uuid 用户编号 * @return 影响行数 */ public int updateUser(User u,int uuid); /** * 用户登录 * @param uname 用户名 * @param upwd 密码 * @return 用户对象 */ public User login(String uname,String upwd); /** * 接口有何特性? * 1.接口不能被实例化new 因此要用里氏替换原则 * 2.接口里面所有的方法都默认就是公开的抽象方法 public abstract * * 抽象方法有何特点: * 1.抽象方法没有方法体 * 2.抽象方法在子类中必须被实现(重写) 除非子类也是抽象类 * 3.必须放在抽象类(接口)中 */
然后再写dao方法进行继承
/** * 数据库访问层 C * @author Janet * * @date 2022年4月8日 上午9:58:12 */ public class UserDao implements IUserDao{ //你以前怎么写dao方法 这里就怎么写 private Connection con=null; private PreparedStatement ps=null; private ResultSet rs=null; @Override public List<User> getAll() { // TODO Auto-generated method stub return null; } @Override public List<User> getAll(String colName, String str) { // TODO Auto-generated method stub return null; } @Override public User getUser(int uuid) { // TODO Auto-generated method stub return null; } @Override public int addUser(User u) { // TODO Auto-generated method stub return 0; } @Override public int deleteUser(int uuid) { // TODO Auto-generated method stub return 0; } @Override public int updateUser(User u, int uuid) { // TODO Auto-generated method stub return 0; } @Override public User login(String uname, String upwd) { User u=null; try { con=DBHelper.getCon();//获得连接 String sql="select * from tb_0325 where sname=? and spwd=?";//定义sql语句 ps=con.prepareStatement(sql);//获得执行对象 //给占位符赋值 ps.setString(1, uname); ps.setString(2, upwd); rs=ps.executeQuery();//获得结果集 //判断 if(rs.next()) { u=new User();//实例化 u.setUuid(rs.getInt(1)); u.setUname(rs.getString(2)); u.setUpwd(rs.getString(3)); } } catch (Exception e) { e.printStackTrace(); } finally { DBHelper.myClose(con, ps, rs); } return u; } }
最后我们再到dologin进行调用判断
<% //设置编码方式 request.setCharacterEncoding("utf-8"); //接收表单的值:用户名 密码 String name=request.getParameter("iname"); String pwd=request.getParameter("ipwd"); //调用方法进行判断 是否登录成功 //表示层A 调用 业务逻辑层B IUserBiz iub=new UserBiz(); //调用登录方法 User u=iub.login(name, pwd); //判断 if(u!=null){ //说明登录成功 out.print("登录成功"); } else{ //说明登录失败 out.print("<script>alert('用户名或者密码有误');location.href='login.jsp';</script>"); } %>
这样我们就完成了我们的三层架构