二、DAO类入门
下面简要介绍各种重要的DAO类:
- ConnectionFactory类:这个类与数据库密切相关。这个工厂类用于连接数据库,或者说打开一个数据库的连接。 连接数据库时,这个类要用到getConnection方法,该方法需要三个参数,分别对应于数据库名称、用户名和口令。这些参数将按照POJO的风格映射到类ConnectionProperty中。 static public function getConnection() {
$conn = mysql_connect(ConnectionProperty::getHost(),
ConnectionProperty::getUser(),
ConnectionProperty::getPassword());
mysql_select_db(ConnectionProperty::getDatabase());
if(!$conn){
throw new Exception('could not connect to database');
}
return $conn;
} - Connection类:这个类代表的是单个数据库连接,该连接是通过Connection构造函数引自ConnectionFactory类的。 这个类还负责关闭连接以及执行SQL查询。public function Connection() {
$this->connection = ConnectionFactory::getConnection();
} - Transaction类:这个类封装了一组对数据库进行事务性操作的函数。此外,这个类还提供了事务数组,这些事务是通过助手类ArrayList来提供的,其中ArrayList可以通过PHP数组来模拟一个集合。这些事务将使用Connection类所提供的连接。此外,Transaction类的getCurrentTransaction函数提供了对当前事务的访问能力。
- QueryExecutor类:这个类为我们提供了执行SQL语句的各种函数。实际上,这些函数都实现了CRUD语法。函数execute可以执行所有的SELECT语句,而函数executeUpdate则执行UPDATE、DELETE和INSERT语句: public static function execute($sqlQuery){
$transaction = Transaction::getCurrentTransaction();
if(!$transaction){
$connection = new Connection();
}else{
$connection = $transaction->getConnection();
}
$query = $sqlQuery->getQuery();
$result = $connection->executeQuery($query);
if(!$result){
throw new Exception(mysql_error());
}
$i=0;
$tab = array();
while ($row = mysql_fetch_array($result)){
$tab[$i++] = $row;
}
mysql_free_result($result);
if(!$transaction){
$connection->close();
}
return $tab;
}
public static function executeUpdate($sqlQuery){
$transaction = Transaction::getCurrentTransaction();
if(!$transaction){
$connection = new Connection();
}else{
$connection = $transaction->getConnection();
}
$query = $sqlQuery->getQuery();
$result = $connection->executeQuery($query);
if(!$result){
throw new Exception(mysql_error());
}
return mysql_affected_rows();
} - {databasename}MySqlDAO类:这是由DAO Generator创建的一个类,它提供了一组特定于某种数据库的DAO函数。生成的类位于generated/class/mysql文件夹内,并且它们的名称是由数据库名称和后缀MySqlDAO结合而成的。在本文的后面,我们将介绍如何生成和使用这个类。
注意,类QueryExecutor和类{databasename}MySqlDAO使用了一个名为SqlQuery的助手类,它封装有表示和存储SQL语句的各种函数。
为了便于读者深入理解,我们下面将通过一个实例加以阐述。