今天在网上看了dao设计模式和一个struts分页方法,自己将他们结合起来写了一个程序实例以加深对他们的理解和运用。
程序实例如下:
首先用mysql创建一个person表,sql语句为:
dao工厂类DAOFactory.java如下:
MysqlDAOFactory.java代码如下:
dao接口PersonDAO.java如下:
执行此接口的MysqlPersonDAO.java如下:
程序实例如下:
首先用mysql创建一个person表,sql语句为:
create
table
person
(
pid int auto_increment,
pname varchar ( 20 ),
primary key (pid)
);
insert into person(pname) values ( ' x ' );
insert into person(pname) values ( ' y ' );
insert into person(pname) values ( ' z ' );
insert into person(pname) values ( ' a ' );
insert into person(pname) values ( ' b ' );
insert into person(pname) values ( ' c ' );
insert into person(pname) values ( ' d ' );
insert into person(pname) values ( ' e ' );
insert into person(pname) values ( ' f ' );
insert into person(pname) values ( ' g ' );
insert into person(pname) values ( ' h ' );
insert into person(pname) values ( ' k ' );
insert into person(pname) values ( ' j ' );
insert into person(pname) values ( ' l ' );
(
pid int auto_increment,
pname varchar ( 20 ),
primary key (pid)
);
insert into person(pname) values ( ' x ' );
insert into person(pname) values ( ' y ' );
insert into person(pname) values ( ' z ' );
insert into person(pname) values ( ' a ' );
insert into person(pname) values ( ' b ' );
insert into person(pname) values ( ' c ' );
insert into person(pname) values ( ' d ' );
insert into person(pname) values ( ' e ' );
insert into person(pname) values ( ' f ' );
insert into person(pname) values ( ' g ' );
insert into person(pname) values ( ' h ' );
insert into person(pname) values ( ' k ' );
insert into person(pname) values ( ' j ' );
insert into person(pname) values ( ' l ' );
dao工厂类DAOFactory.java如下:
/
Abstract
class
DAOFactory
public abstract class DAOFactory ... {
//ListofDAOtypessupportedbythefactory
publicstaticfinalintMYSQL=1;
//...
//TherewillbeamethodforeachDAOthatcanbe
//created.Theconcretefactorieswillhaveto
//implementthesemethods.
publicabstractPersonDAOgetPersonDAO();
//...
publicstaticDAOFactorygetDAOFactory(
intwhichFactory)...{
switch(whichFactory)...{
caseMYSQL:
returnnewMysqlDAOFactory();
//...
default:
returnnull;
}
}
}
public abstract class DAOFactory ... {
//ListofDAOtypessupportedbythefactory
publicstaticfinalintMYSQL=1;
//...
//TherewillbeamethodforeachDAOthatcanbe
//created.Theconcretefactorieswillhaveto
//implementthesemethods.
publicabstractPersonDAOgetPersonDAO();
//...
publicstaticDAOFactorygetDAOFactory(
intwhichFactory)...{
switch(whichFactory)...{
caseMYSQL:
returnnewMysqlDAOFactory();
//...
default:
returnnull;
}
}
}
MysqlDAOFactory.java代码如下:
import
java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
public class MysqlDAOFactory extends DAOFactory ... {
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();
}
}
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
public class MysqlDAOFactory extends DAOFactory ... {
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如下:
import
java.util.Collection;
import javax.sql.RowSet;
public interface PersonDAO ... {
publicintinsertPerson(Stringpname);
publicbooleandeletePerson(intpid);
publicPersonfindPerson(intpid);
publicbooleanupdatePerson(Personp);
//publicRowSetselectCustomersRS();
publicCollectionselectCustomersTO(Stringsql,intstartIndex,intrecordPerPage);
//...
}
import javax.sql.RowSet;
public interface PersonDAO ... {
publicintinsertPerson(Stringpname);
publicbooleandeletePerson(intpid);
publicPersonfindPerson(intpid);
publicbooleanupdatePerson(Personp);
//publicRowSetselectCustomersRS();
publicCollectionselectCustomersTO(Stringsql,intstartIndex,intrecordPerPage);
//...
}
执行此接口的MysqlPersonDAO.java如下:
/
CloudscapeCustomerDAOimplementationofthe
// CustomerDAOinterface.Thisclasscancontainall
// CloudscapespecificcodeandSQLstatements.
// Theclientisthusshieldedfromknowing
// theseimplementationdetails.
// importjava.sql.*;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.Collection;
// importjavax.sql.RowSet;
public class MysqlPersonDAO implements
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
// CustomerDAOinterface.Thisclasscancontainall
// CloudscapespecificcodeandSQLstatements.
// Theclientisthusshieldedfromknowing
// theseimplementationdetails.
// importjava.sql.*;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.Collection;
// importjavax.sql.RowSet;
public class MysqlPersonDAO implements
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