一、信息系统的开发架构
客户层-------显示层-------业务层---------数据层---------数据库
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 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 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 list = new ArrayList();
-
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 findAll()throws Exception{
-
Listlist = 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只负责显示的效果。
转自:http://blog.csdn.net/xiazdong/article/details/6895465/
阅读(1560) | 评论(0) | 转发(0) |