技术开发 频道

将DAO Generator应用于PHP和MySQL

  二、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类的。
    public function Connection() {
       $
    this->connection = ConnectionFactory::getConnection();
    }
    这个类还负责关闭连接以及执行SQL查询。
  • 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语句的各种函数。

  为了便于读者深入理解,我们下面将通过一个实例加以阐述。

0
相关文章