今天在网上看了dao设计模式和一个struts分页方法,自己将他们结合起来写了一个程序实例以加深对他们的理解和运用。
程序实例如下:
首先用mysql创建一个person表,sql语句为:
createtableperson
(
pidintauto_increment,
pnamevarchar(20),
primarykey(pid)
);

insertintoperson(pname)values('x');
insertintoperson(pname)values('y');
insertintoperson(pname)values('z');
insertintoperson(pname)values('a');
insertintoperson(pname)values('b');
insertintoperson(pname)values('c');
insertintoperson(pname)values('d');
insertintoperson(pname)values('e');
insertintoperson(pname)values('f');
insertintoperson(pname)values('g');
insertintoperson(pname)values('h');
insertintoperson(pname)values('k');
insertintoperson(pname)values('j');
insertintoperson(pname)values('l');
dao工厂类DAOFactory.java如下:
/AbstractclassDAOFactory

publicabstractclassDAOFactory...{

//ListofDAOtypessupportedbythefactory
publicstaticfinalintMYSQL=1;
//...

//TherewillbeamethodforeachDAOthatcanbe
//created.Theconcretefactorieswillhaveto
//implementthesemethods.
publicabstractPersonDAOgetPersonDAO();
//...

publicstaticDAOFactorygetDAOFactory(

intwhichFactory)...{


switch(whichFactory)...{
caseMYSQL:
returnnewMysqlDAOFactory();
//...
default:
returnnull;
}
}
}
MysqlDAOFactory.java代码如下:
importjava.sql.Connection;
importjava.sql.DriverManager;
importjava.sql.ResultSet;
importjava.sql.Statement;


publicclassMysqlDAOFactoryextendsDAOFactory...{
privatestaticfinalStringDRIVER=
"com.mysql.jdbc.Driver";
privatestaticfinalStringDBURL=
"jdbc:mysql://localhost/daotest?user=root&password=101213&useUnicode=true&characterEncoding=gb2312";

//methodtocreateCloudscapeconnections

publicstaticConnectioncreateConnection()...{
//UseDRIVERandDBURLtocreateaconnection
//Recommendconnectionpoolimplementation/usage
Connectionconn=null;

try...{
Class.forName(DRIVER).newInstance();
conn=DriverManager.getConnection(DBURL);

}catch(Exceptione)...{
e.printStackTrace();
}
returnconn;
}


publicstaticvoidcloseAll(Connectionconn,Statementstmt,ResultSetrs)...{

if(rs!=null)...{

try...{
rs.close();

}catch(Exceptione)...{
System.out.println("closeresultsetfailed."+e.getMessage());
}
}

if(stmt!=null)...{

try...{
stmt.close();

}catch(Exceptione)...{
System.out.println("closestatementfailed."+e.getMessage());
}
}

if(conn!=null)...{

try...{
conn.close();

}catch(Exceptione)...{
System.out.println("closeconnectionfailed."+e.getMessage());
}
}
}


publicPersonDAOgetPersonDAO()...{
//CloudscapeCustomerDAOimplementsCustomerDAO
returnnewMysqlPersonDAO();
}

}
dao接口PersonDAO.java如下:
importjava.util.Collection;

importjavax.sql.RowSet;


publicinterfacePersonDAO...{
publicintinsertPerson(Stringpname);
publicbooleandeletePerson(intpid);
publicPersonfindPerson(intpid);
publicbooleanupdatePerson(Personp);
//publicRowSetselectCustomersRS();
publicCollectionselectCustomersTO(Stringsql,intstartIndex,intrecordPerPage);
//...
}
执行此接口的MysqlPersonDAO.java如下:
/CloudscapeCustomerDAOimplementationofthe
//CustomerDAOinterface.Thisclasscancontainall
//CloudscapespecificcodeandSQLstatements.
//Theclientisthusshieldedfromknowing
//theseimplementationdetails.

//importjava.sql.*;
importjava.sql.Connection;
importjava.sql.ResultSet;
importjava.sql.SQLException;
importjava.sql.Statement;
importjava.util.ArrayList;
importjava.util.Collection;

//importjavax.sql.RowSet;

publicclassMysqlPersonDAOimplements

PersonDAO...{

privateinttotalPerson=0;


publicintgetTotalPerson()...{
returntotalPerson;
}


publicvoidsetTotalPerson(inttotalPerson)...{
this.totalPerson=totalPerson;
}


publicMysqlPersonDAO()...{
//initialization
}

//Thefollowingmethodscanuse
//CloudscapeDAOFactory.createConnection()
//togetaconnectionasrequired


publicintinsertPerson(Stringpname)...{
//Implementinsertcustomerhere.
//Returnnewlycreatedcustomernumber
//ora-1onerror
return0;
}


publicbooleandeletePerson(intpid)...{
//Implementdeletecustomerhere
//Returntrueonsuccess,falseonfailure
returnfalse;
}


publicPersonfindPerson(intpid)...{
//Implementfindacustomerhereusingsupplied
//argumentvaluesassearchcriteria
//ReturnaTransferObjectiffound,
//returnnullonerrororifnotfound
returnnull;
}


publicbooleanupdatePerson(Personp)...{
//implementupdaterecordhereusingdata
//fromthecustomerDataTransferObject
//Returntrueonsuccess,falseonfailureor
//error
returnfalse;
}

//publicRowSetselectCustomersRS(){
//implementsearchcustomershereusingthe
//suppliedcriteria.
//ReturnaRowSet.
//returnnull;
//}


publicCollectionselectCustomersTO(Stringsql,intstartIndex,intrecordPerPage)...{
//implementsearchcustomershereusingthe
//suppliedcriteria.
//Alternatively,implementtoreturnaCollection
//ofTransferObjects.
ArrayListpList=newArrayList();
Connectionconn=null;
Statementstmt
程序实例如下:
首先用mysql创建一个person表,sql语句为:





















dao工厂类DAOFactory.java如下:




























MysqlDAOFactory.java代码如下:







































































dao接口PersonDAO.java如下:














执行此接口的MysqlPersonDAO.java如下:

























































































