JavaBean在DAO设计模式简介


一、信息系统开发框架


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

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

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只负责显示结果。




原文地址:https://www.cnblogs.com/lcchuguo/p/4593683.html