DAO设计模式&&struts分页

本文介绍了一种结合Struts分页方法与DAO设计模式的应用实例。通过使用MySQL数据库和Java实现,该实例展示了如何在分页显示数据的同时保持良好的代码结构与可维护性。
今天在网上看了dao设计模式和一个struts分页方法,自己将他们结合起来写了一个程序实例以加深对他们的理解和运用。

程序实例如下:

首先用mysql创建一个person表,sql语句为:
createtableperson
(
pid
intauto_increment,
pname
varchar(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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值