一个标准的开发框架有如下几个部分构成:
客户层-->显示层(JSP/Servlet)-->业务层(BO)-->数据层(DAO)-->资源层
DAO(Date Access Object,数据访问对象)设计模式可以用来完成数据层的开发。DAO由以下几个部分组成:
DatabaseConnection: 专门负责数据库打开和关闭的操作类。
VO: 主要由属性、setter、getter方法组成,其属性要与数据表中的字段相对应,每一个VO类对象表示表中的一条记录。
DAO: 主要定义数据操作的接口,如增加,删除,修改,查询等操作。
Impl: 真实主题类。实现DAO接口的类,完成数据库的具体操作,但不负责数据库的打开和关闭。
Proxy: 代理主题类,主要完成数据库的打开和关闭,并且调用真实主题类对象操作。
Factory: 工厂类,通过工厂类取得一个DAO的实例化对象。
例:
[定义对应的VO类: Emp.java]
public class Emp{
private int empno;
private String ename;
private String job;
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 String getJob() {
return job;
}
public void setJob(String job) {
this.job = job;
}
}
[定义数据库连接类: DatabaseConnection.java]
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
public class DatabaseConnection{
public static final String DRIVER="org.git.mm.mysql.Driver";
public static final String DBURL="jdbc:mysql://localhost:3306/";
public static final String DBUSER="hangxing";
public static final String DBPW="123456789";
private Connection con=null;
public DatebaseConnection()
{
try {
Class.forName(DRIVER); //加载数据库
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
this.con=DriverManager.getConnection(DBURL,DBUSER,DBPW);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public Connection getCon() {
return con;
}
public void close() //数据库关闭操作
{
if(this.con!=null) //避免NullPointerException
{
try {
this.con.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
}
[定义DAO 操作标准: IEmpDAO.java]
import java.util.List;
public interface IEmpDAO{
// 插入操作
public boolean doCreat(Emp emp) throws Exception;
//查找一条指定数据
public Emp findById(int empno) throws Exception;
//查寻全部数据
public List<Emp> findAll(String keyWord) throws Exception;
}
[定义真实主题类: EmpDAOImpl.java]
import java.sql.Connection;
import java.sql.PreparedStatement;
public class EmpDAOImpl{
private Connection conn;
private PreparedStatement;
public EmpDAOImpl(Connection con)
{
this.con=con;
}
public boolean doCreat(Emp emp) throws Exception {
boolean flag=false;
String sql="INSERT INTO emp(empno, ename, job) VALUES (?,?,?)";
this.ps=this.con.prepareStatement(sql);
this.ps.setInt(1, emp.getNo());
this.ps.setString(2, emp.getEname());
this.ps.setString(3, emp.getJob());
if(this.ps.executeUpdate()>0)
{
flag=true;
}
this.ps.close();
return flag;
}
public Emp findById(int empno) throws Exception {
return null;
}
public List<Emp> findAll(String keyWord) throws Exception {
return null;
}
}
[定义代理主题类: EmpDAOProxy.java]
public class EmpDAOProxy implement IEmpDAO{
private DatabaseConnection dbc=null;
private IEmpDAO dao=null;
public EmpDAOProxy()
{
this.dbc=new DatabaseConnection();
this.dao=new EmpDAOImpl(this.dbc.getConnection());
}
public boolean doCreat(Emp emp) throws Exception {
boolean flag=false;
return flag;
}
public Emp findById(int empno) throws Exception {
return null;
}
public List<Emp> findAll(String keyWord) throws Exception {
return null;
}
}
[定义工厂类: EmpFactory.java]
public class EmpFactory{
public static EmpDAOProxy getEmpInstance()
{
return new EmpDAOProxy();
}
}