JavaWeb(三层框架)

前言

嗨咯,又见面了,今天带来的分享是三层框架,今日的内容讲的是为什么需要分层,和怎么实现分层


提示:以下是本篇文章正文内容,下面案例可供参考

一、为什么需要分层?

由于业务处理的代码与jsp代码混在一起,不易于阅读,不易代码维护,所以我们需要分层

二、软件设计中的分层模式

1.分层模式

  1. 分层模式是最常见的一种架构模式
  2. 是很多架构模式的基础

2.分层

  1. 将解决方案的组件分隔到不同的层中
  2. 在同一个层中组件之间保持内聚性
  3. 层与层之间保持松藕合

三、三层模式的划分

  • 表示层
  • 业务逻辑层
  • 数据库访问层
  • JavaWeb(三层框架)_第1张图片

层与层之间的关系

表示层依赖于业务逻辑层  

业务逻辑层依赖于数据访问层

图解:JavaWeb(三层框架)_第2张图片

二、实现分层

第一种方式【接口和实现类放到同一个包中】:

 1.编写数据访问层

数据类型访问接口:

public interface IUserDao {
	
	/**
	 * 查询全部
	 * @return 用户集合
	 */
	public ListgetAll();
	/**
	 * 模糊查询
	 * @param colName 列名
	 * @param str 关键字
	 * @return 用户集合
	 */
	public ListgetAll(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 name 用户名
	 * @param upwd 密码
	 * @return 用户
	 */
	public User login(String name,String upwd);
}

 2.数据访问接口的实现:

/**
 * 数据库访问层
 * @author Administrator
 *
 */
public class UserDao implements IUserDao{

	private Connection con=null;
	private PreparedStatement ps=null;
	private ResultSet rs=null;
	
	@Override
	public List getAll() {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public List 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 name, 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, name);
			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;
	}
	
}

 

第二种方式【接口和实现类放到不同的包中】:

1. 编写业务逻辑层接口

 代码块和第一种方式中编写数据访问层相同

业务逻辑通常以Biz命名

2.数据访问接口的实现

/**
 * 业务逻辑层 B
 * @author Administrator
 *
 */
public class UserBiz implements IUserBiz {
	
	//业务逻辑层 调用 数据库访问层c
	IUserDao iud=new UserDao();//里氏替换原则
	
	@Override
	public List getAll() {
		// TODO Auto-generated method stub
		return iud.getAll();
	}

	@Override
	public List getAll(String colName, String str) {
		// TODO Auto-generated method stub
		return iud.getAll(colName, str);
	}

	@Override
	public User getUser(int uuid) {
		// TODO Auto-generated method stub
		return iud.getUser(uuid);
	}

	@Override
	public int addUser(User u) {
		// TODO Auto-generated method stub
		return iud.addUser(u);
	}

	@Override
	public int deleteUser(int uuid) {
		// TODO Auto-generated method stub
		return iud.deleteUser(uuid);
	}

	@Override
	public int updateUser(User u, int uuid) {
		// TODO Auto-generated method stub
		return iud.deleteUser(uuid);
	}

	@Override
	public User login(String name, String upwd) {
		// TODO Auto-generated method stub
		return iud.login(name, upwd);
	}

}

 

 注意:在业务逻辑层中要调用数据访问层,实体类要去实现Serializable接口,是为了防止序列化和反序列化异常

三、调用

//表示层a 调用 业务逻辑层b
	IUserBiz iud=new UserBiz();
	//调用登录方法
	User u=iud.login(name, pwd);
	//判断
	if(u!=null){
		//登录成功
		out.print("登录成功");
	}
	else{
		//说明登录失败
		out.print("");
	}

总结

以上就是要讲的内容了,感谢阅读,如有不对的地方,还请告知,我们下次再见吧

你可能感兴趣的:(java,前端,web)