为什么要分层分层模式分层三层模式的划分层与层之间的关系三层开发遵循的原则分层开发的特点分层开发的优势栗子:分层实现用户登录
为什么要分层(JSP开发的弊端 ) 业务处理的代码与JSP代码混在一起,不易于阅读,不易于代码维护。
分层模式是最常见的一种架构模式 。是很多架构模式的基础。 分层
将解决方案的组件分隔到不同的层中 ,在同一个层中组件之间保持内聚性,层与层之间保持松耦合
三层模式的划分表示层业务逻辑层数据库访问层 层与层之间的关系
表示层依赖于业务逻辑层业务逻辑层依赖于数据访问层 三层开发遵循的原则
上层依赖其下层,依赖关系不跨层下一层不能调用上一层下一层不依赖上一层在上一层中不能出现下一层的概念 分层开发的特点
下层不知道上层的存在(也就是仅仅只完成自己的功能功能,不会去关心结果的使用)每一层仅知道其下层的存在,忽略其他层的存在(只关心结果不关心过程,JSTL通常会与EL表达式合作实现JSP页面的编码
)
分层开发的优势
职责划分清晰无损替换复用代码降低了系统内部的依赖程度 栗子:分层实现用户登录
- 创建用户实体类
package com.zking.entity;
public class Users {
private String uuid;
private String uname;
private String upwd;
private String usex;
private int uage;
private String uhonney;
private String uaddress;
private String upower;
private String ucomment;
public String getUuid() {
return uuid;
}
public void setUuid(String uuid) {
this.uuid = uuid;
}
public String getUname() {
return uname;
}
public void setUname(String uname) {
this.uname = uname;
}
public String getUpwd() {
return upwd;
}
public void setUpwd(String upwd) {
this.upwd = upwd;
}
public String getUsex() {
return usex;
}
public void setUsex(String usex) {
this.usex = usex;
}
public int getUage() {
return uage;
}
public void setUage(int uage) {
this.uage = uage;
}
public String getUhonney() {
return uhonney;
}
public void setUhonney(String uhonney) {
this.uhonney = uhonney;
}
public String getUaddress() {
return uaddress;
}
public void setUaddress(String uaddress) {
this.uaddress = uaddress;
}
public String getUpower() {
return upower;
}
public void setUpower(String upower) {
this.upower = upower;
}
public String getUcomment() {
return ucomment;
}
public void setUcomment(String ucomment) {
this.ucomment = ucomment;
}
@Override
public String toString() {
return "Users [uuid=" + uuid + ", uname=" + uname + ", upwd=" + upwd + ", usex=" + usex + ", uage=" + uage
+ ", uhonney=" + uhonney + ", uaddress=" + uaddress + ", upower=" + upower + ", ucomment=" + ucomment
+ "]";
}
public Users() {
// TODO Auto-generated constructor stub
}
public Users(String uuid, String uname, String upwd, String usex, int uage, String uhonney, String uaddress,
String upower, String ucomment) {
super();
this.uuid = uuid;
this.uname = uname;
this.upwd = upwd;
this.usex = usex;
this.uage = uage;
this.uhonney = uhonney;
this.uaddress = uaddress;
this.upower = upower;
this.ucomment = ucomment;
}
public Users( String uname, String upwd, String usex, int uage, String uhonney, String uaddress,
String upower, String ucomment) {
super();
this.uname = uname;
this.upwd = upwd;
this.usex = usex;
this.uage = uage;
this.uhonney = uhonney;
this.uaddress = uaddress;
this.upower = upower;
this.ucomment = ucomment;
}
public Users( String uname, String upwd) {
super();
this.uname = uname;
this.upwd = upwd;
}
}
- 编写数据访问层
数据访问接口
//数据访问接口
package com.zking.dao;
import java.util.List;
import com.zking.entity.Users;
public interface IUsersDao {
int login(Users users);
int insert(Users users);
int update(Users users);
List query(Users users);
}
数据访问接口的实现
// 数据访问接口的实现
package com.zking.dao.impl;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.List;
import com.zking.dao.IUsersDao;
import com.zking.entity.Users;
import com.zking.util.DBhelper;
public class UsersDao implements IUsersDao{
private PreparedStatement ps;
private List listusers;
private Connection con;
private ResultSet rs;
private boolean flag;
private String sql;
private Users users;
private int upower;
private int n;
@Override
public int login(Users users) {
try {
con = DBhelper.getCon();
sql = "select upower from tb_users where uname=? and upwd=?";
ps = con.prepareStatement(sql);
ps.setString(1, users.getUname());
ps.setString(2,users.getUpwd() );
rs = ps.executeQuery();
if(rs.next()) {
upower = rs.getInt(1);
}
DBhelper.closeObj(con, ps, rs);
} catch (Exception e) {
e.printStackTrace();
}
return upower;
}
@Override
public int insert(Users users) {
// TODO Auto-generated method stub
return 0;
}
@Override
public int update(Users users) {
// TODO Auto-generated method stub
return 0;
}
@Override
public List query(Users users) {
// TODO Auto-generated method stub
return null;
}
}
- 编写业务逻辑层
编写业务逻辑控制接口IUserBiz
//编写业务逻辑控制接口IUserBiz
package com.zking.biz;
import java.util.List;
import com.zking.entity.Users;
public interface IUsersBiz {
int login(Users users);
int insert(Users users);
int update(Users users);
List query(Users users);
}
业务逻辑层接口实现
// 业务逻辑层接口实现
package com.zking.biz.impl;
import java.util.List;
import com.zking.biz.IUsersBiz;
import com.zking.dao.IUsersDao;
import com.zking.dao.impl.UsersDao;
import com.zking.entity.Users;
public class UsersBiz implements IUsersBiz{
// 在业务逻辑层biz里面调用数据访问层
IUsersDao iud = new UsersDao();// 里氏替换原则
@Override
public int login(Users users) {
return iud.login(users);
}
@Override
public int insert(Users users) {
return insert(users);
}
@Override
public int update(Users users) {
return update(users);
}
@Override
public List query(Users users) {
return query(users);
}
}
编写表示层
编写登录jps界面
// 编写登录jps界面
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
Insert title here
jsp界面调用业务逻辑层
// jsp界面调用业务逻辑层
<%@page import="com.zking.entity.Users"%>
<%@page import="com.zking.biz.impl.UsersBiz"%>
<%@page import="com.zking.biz.IUsersBiz"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
request.setCharacterEncoding("utf-8");
String uname = request.getParameter("uname");
String upwd = request.getParameter("upwd");
Users users = new Users();
users.setUname(uname);
users.setUpwd(upwd);
// 调用业务逻辑层登录方法
IUsersBiz iub = new UsersBiz();
int n = iub.login(users);
%>



