zoukankan      html  css  js  c++  java
  • JavaBean中DAO设计模式介绍


    一、信息系统的开发架构


    客户层-------显示层-------业务层---------数据层---------数据库

    1.客户层:客户层就是客户端,简单的来说就是浏览器。

    2.显示层:JSP/Servlet,用于给浏览器显示。

    3.业务层:对于数据层的原子操作进行整合

    4.数据层:对于数据库进行的原子操作,增加、删除等;


    二、DAO(Data Access Object)介绍


    DAO应用在数据层那块,用于访问数据库,对数据库进行操作的类。


    三、DAO设计模式的结构


    DAO设计模式一般分为几个类:

    1.VO(Value Object):一个用于存放网页的一行数据即一条记录的类,比如网页要显示一个用户的信息,则这个类就是用户的类。

    2.DatabaseConnection:用于打开和关闭数据库。

    3.DAO接口:用于声明对于数据库的操作。

    4.DAOImpl:必须实现DAO接口,真实实现DAO接口的函数,但是不包括数据库的打开和关闭。

    5.DAOProxy:也是实现DAO接口,但是只需要借助DAOImpl即可,但是包括数据库的打开和关闭。

    6.DAOFactory:工厂类,含有getInstance()创建一个Proxy类。


    四、DAO的好处


    DAO的好处就是提供给用户的接口只有DAO的接口,所以如果用户想添加数据,只需要调用create函数即可,不需要数据库的操作。


    五、DAO包命名


    对于DAO,包的命名和类的命名一定要有层次。


    六、实例解析


    1.Emp.java

    package org.vo;
    import java.util.*;
    public class Emp{
    	private int empno;
    	private String ename;
    	private String job;
    	private Date hireDate;
    	private float sal;
    	public Emp(){
    		
    	}
    	public int getEmpno(){
    		return empno;
    	}
    	public void setEmpno(int empno){
    		this.empno = empno;
    	}
    	public String getEname(){
    		return ename;
    	}
    	public void setEname(String ename){
    		this.ename = ename;
    	}
    	public Date getHireDate(){
    		return hireDate;
    	}
    	public void setHireDate(Date hireDate){
    		this.hireDate = hireDate;
    	}
    	public float getSal(){
    		return sal;
    	}
    	public void setSal(float sal){
    		this.sal = sal;
    	}
    	public String getJob(){
    		return job;
    	}
    	public void setJob(String job){
    		this.job = job;
    	}
    }
    2.DatabaseConnection.java

    package org.dbc;
    import java.sql.*;
    public class DatabaseConnection{
    	private Connection con = null;
    	private static final String DRIVER = "com.mysql.jdbc.Driver";
    	private static final String USER = "root";
    	private static final String URL = "jdbc:mysql://localhost:3306/mldn";
    	private static final String PASS = "12345";
    	public DatabaseConnection()throws Exception{
    		Class.forName(DRIVER);
    		con = DriverManager.getConnection(URL,USER,PASS);
    	}
    	public Connection getConnection()throws Exception{
    		return con;
    	}
    	public void close()throws Exception{
    		if(con!=null){
    			con.close();
    		}
    	}
    }
    3.IEmpDAO.java

    package org.dao;
    import java.util.List;
    import org.vo.*;
    public interface IEmpDAO{
    	public boolean doCreate(Emp emp)throws Exception;
    	public List<Emp> findAll()throws Exception;
    	public Emp findById(int empno)throws Exception;
    }
    4.EmpDAOImpl.java

    package org.dao.impl;
    import org.dao.*;
    import java.sql.*;
    import org.vo.*;
    import java.util.*;
    public class EmpDAOImpl implements IEmpDAO{
    	private Connection con;
    	private PreparedStatement stat = null;
    	public EmpDAOImpl(Connection con){
    		this.con = con;
    	}
    	public boolean doCreate(Emp emp)throws Exception{
    		String sql = "INSERT INTO emp(empno,ename,job,hiredate,sal) VALUES(?,?,?,?,?)";
    		stat = con.prepareStatement(sql);
    		stat.setInt(1,emp.getEmpno());
    		stat.setString(2,emp.getEname());
    		stat.setString(3,emp.getJob());
    		stat.setDate(4,new java.sql.Date(emp.getHireDate().getTime()));
    		stat.setFloat(5,emp.getSal());
    		int update = stat.executeUpdate();
    		if(update>0){
    			return true;
    		}
    		else{
    			return false;
    		}
    	}
    	public List<Emp> findAll()throws Exception{
    		String sql = "SELECT empno,ename,job,hiredate,sal FROM emp";
    		stat = con.prepareStatement(sql);
    		ResultSet rs = stat.executeQuery();
    		Emp emp = null;
    		List<Emp> list = new ArrayList<Emp>();
    		while(rs.next()){
    			int empno = rs.getInt(1);
    			String ename = rs.getString(2);
    			String job = rs.getString(3);
    			float sal = rs.getFloat(5);
    			emp = new Emp();
    			emp.setEmpno(empno);
    			emp.setEname(ename);
    			emp.setJob(job);
    			emp.setHireDate(rs.getDate(4));
    			emp.setSal(sal);
    			list.add(emp);
    		}
    		return list;
    	}
    	public Emp findById(int empno)throws Exception{
    		String sql = "SELECT empno,ename,job,hiredate,sal FROM emp WHERE empno=?";
    		stat = con.prepareStatement(sql);
    		stat.setInt(1,empno);
    		ResultSet rs = stat.executeQuery();
    		Emp emp = null;
    		if(rs.next()){
    			String ename = rs.getString(2);
    			String job = rs.getString(3);
    			float sal = rs.getFloat(5);
    			emp = new Emp();
    			emp.setEmpno(empno);
    			emp.setEname(ename);
    			emp.setJob(job);
    			emp.setHireDate(rs.getDate(4));
    			emp.setSal(sal);
    		}
    		return emp;
    	}
    }

    5.EmpDAOProxy.java

    package org.dao.impl;
    import org.dao.*;
    import java.sql.*;
    import org.vo.*;
    import java.util.*;
    import org.dbc.*;
    public class EmpDAOProxy implements IEmpDAO{
    	private DatabaseConnection dbc;
    	private IEmpDAO dao = null;
    	public EmpDAOProxy()throws Exception{
    		dbc = new DatabaseConnection();
    		dao = new EmpDAOImpl(dbc.getConnection());
    	}
    	public boolean doCreate(Emp emp)throws Exception{
    		boolean flag = false;
    		if(dao.findById(emp.getEmpno())==null){
    			flag = dao.doCreate(emp);
    		}
    		dbc.close();
    		return flag;
    	}
    	public List<Emp> findAll()throws Exception{
    		List<Emp>list = dao.findAll();
    		dbc.close();
    		return list;
    	}
    	public Emp findById(int empno)throws Exception{
    		Emp emp = dao.findById(empno);
    		dbc.close();
    		return emp;
    	}
    }
    6.DAOFactory.java

    package org.dao.factory;
    import org.dao.*;
    import java.sql.*;
    import org.vo.*;
    import java.util.*;
    import org.dbc.*;
    import org.dao.impl.*;
    public class DAOFactory{
    	public static IEmpDAO getInstance(){
    		IEmpDAO dao = null;
    		try{
    			dao = new EmpDAOProxy();	
    		}
    		catch(Exception e){
    			e.printStackTrace();
    		}
    		return dao;
    	}
    }

    7.TestDAO.java

    package org.dao.test;
    import org.dao.factory.*;
    import org.vo.*;
    import org.dao.*;
    public class TestDAO{
    	public static void main(String args[])throws Exception{
    		Emp emp = null;
    		for(int i=0;i<5;i++){
    			emp = new Emp();
    			emp.setEmpno(i);
    			emp.setEname("xiazdong-"+i);
    			emp.setJob("stu-"+i);
    			emp.setHireDate(new java.util.Date());
    			emp.setSal(500*i);
    			DAOFactory.getInstance().doCreate(emp);
    		}
    	}
    }

    通过DAO设计模式,可以在JSP中屏蔽了数据库连接的操作,达到JSP只负责显示的效果。




    作者:xiazdong
    出处:http://blog.xiazdong.info
    本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接。
  • 相关阅读:
    top、ps -ef、ps aux的区别及内容详解
    img2pdf 报 img2pdf.AlphaChannelError: Refusing to work on images with alpha channel 的解决方案
    Scrapy命令行调用传入自定义参数
    查询Linux CPU架构
    LeetCode 216. 组合总和 III | Python
    LeetCode 40. 组合总和 II | Python
    LeetCode 39. 组合总和 | Python
    LeetCode 77. 组合 | Python
    LeetCode 347. 前 K 个高频元素 | Python
    LeetCode 107. 二叉树的层次遍历 II | Python
  • 原文地址:https://www.cnblogs.com/xiazdong/p/3058142.html
Copyright © 2011-2022 走看看