國產InitPHP架構系列 - InitPHP架構搭建高可用WEB應用05:資料層Dao使用

來源:互聯網
上載者:User

標籤:style   blog   http   io   ar   color   os   使用   sp   

InitPHP架構是一款輕量級PHP開源架構,架構文檔和:http://initphp.com

Dao層說明

Dao層通俗的講就是資料層。再簡單的講,Dao層主要是用於寫sql語句的。可能沒有搞過Java的同學會對DAO層比較陌生,甚至不能接受。

但是引入DAO層有非常大的好處:

1. 將業務和資料操作進行剝離。例如將原來的MVC中的module層分割成Service和Dao層。Service主要用來負責業務操作,而Dao主要用來負責資料的操作。

2. 原來的MVC模式,項目開發越久,時間越長,大部分SQL語句都會和業務合在一起,後期維護會變得異常困難,甚至修改一個表的欄位需要尋找所有的SQL語句進行修改。引進了DAO 之後,SQL語句的修改只需要在DAO中直接修改就好了。筆者曾經參與過phpwind,因為曆史原因,曾經也幹過為了修改一個資料表欄位而找遍所有檔案的戳事。

3. 引進Dao層之後,大大方便了分表分庫的操作。因為SQL語句都集中在一個檔案中,直接修改就行了。

4. 引進DAO層之後,可以方便的遷移儲存媒介,例如本來這個資料表存在mysql上的,現在可以方便的遷移到mongodb上面。

5. Dao層的 原則:一般情個況下一個Dao檔案對應一個資料庫表,但是也允許一個Dao中有多個表(盡量業務是相同的模組)。


Dao配置

下面是我們InitPHP架構的資料庫配置:

/*********************************DAO資料庫配置*****************************************//** * Dao配置參數 * 1. 你可以配置Dao的路徑和檔案(類名稱)的尾碼名 * 2. 一般情況下您不需要改動此配置 */$InitPHP_conf['dao']['dao_postfix']  = 'Dao'; //尾碼$InitPHP_conf['dao']['path']  = 'library/dao/'; //尾碼/** * 資料庫配置 * 1. 根據項目的資料庫情況配置 * 2. 支援單資料庫伺服器,讀寫分離,隨機分布的方式 * 3. 可以根據$InitPHP_conf['db']['default']['db_type'] 選擇mysql mysqli(暫時支援這兩種) * 4. 支援多庫配置 $InitPHP_conf['db']['default'] * 5. 詳細見文檔 */$InitPHP_conf['db']['driver']   = 'mysqli'; //選擇不同的資料庫DB 引擎,一般預設mysqli,或者mysqls//default資料庫配置 一般使用中 $this->init_db('default')-> 或者 $this->init_db()-> 為預設的模型$InitPHP_conf['db']['default']['db_type']                   = 0; //0-單個伺服器,1-讀寫分離,2-隨機$InitPHP_conf['db']['default'][0]['host']                   = '127.0.0.1'; //主機$InitPHP_conf['db']['default'][0]['username']               = 'root'; //資料庫使用者名稱$InitPHP_conf['db']['default'][0]['password']               = 'root'; //資料庫密碼$InitPHP_conf['db']['default'][0]['database']               = 'test'; //資料庫$InitPHP_conf['db']['default'][0]['charset']                = 'utf8'; //資料庫編碼   $InitPHP_conf['db']['default'][0]['pconnect']               = 0; //是否持久連結//test資料庫配置 使用:$this->init_db('test')->  支援讀寫分離,隨機播放(有兩個資料庫)$InitPHP_conf['db']['test']['db_type']                      = 2; //0-單個伺服器,1-讀寫分離,2-隨機$InitPHP_conf['db']['test'][0]['host']                      = '127.0.0.1'; //主機$InitPHP_conf['db']['test'][0]['username']                  = 'root'; //資料庫使用者名稱$InitPHP_conf['db']['test'][0]['password']                  = ''; //資料庫密碼$InitPHP_conf['db']['test'][0]['database']                  = 't1'; //資料庫$InitPHP_conf['db']['test'][0]['charset']                   = 'utf8'; //資料庫編碼   $InitPHP_conf['db']['test'][0]['pconnect']                  = 0; //是否持久連結$InitPHP_conf['db']['test'][1]['host']                      = '127.0.0.1'; //主機$InitPHP_conf['db']['test'][1]['username']                  = 'root'; //資料庫使用者名稱$InitPHP_conf['db']['test'][1]['password']                  = ''; //資料庫密碼$InitPHP_conf['db']['test'][1]['database']                  = 't1'; //資料庫$InitPHP_conf['db']['test'][1]['charset']                   = 'utf8'; //資料庫編碼   $InitPHP_conf['db']['test'][1]['pconnect']                  = 0; //是否持久連結

InitPHP支援多資料庫連接,也支援讀寫分離。

我們這邊主要只將單表的操作。


基本使用1. 建立一個資料表

我們在test這個庫中建立一個非常簡單的user表:

表結構:

CREATE TABLE `user` (  `id` int(10) NOT NULL auto_increment,  `username` varchar(255) NOT NULL,  `password` varchar(255) NOT NULL,  PRIMARY KEY  (`id`)) ENGINE=MyISAM  DEFAULT CHARSET=utf8  ;


2. 建立一個Dao

設定檔中,我們配置了Dao的相關配置:

$InitPHP_conf['dao']['dao_postfix']  = 'Dao'; //尾碼$InitPHP_conf['dao']['path']  = 'library/dao/'; //尾碼

所以我們建立的Dao檔案放在library/dao/檔案夾中,尾碼名稱Dao


userDao需要繼承Dao的基類

<?php class userDao extends Dao {public $table_name = 'user';private $fields = "username,password";/** * 新增使用者 * @param $user */public function addUser($user) {$user = $this->init_db()->build_key($user, $this->fields);return $this->init_db()->insert($user, $this->table_name);}/** * 通過ID擷取一條資料 * @param unknown_type $id */public function getUser($id) {return $this->init_db()->get_one($id, $this->table_name);}}

3. 在Service中調用Dao

我們有一個userService:


userService需要繼承基類Service

<?php/** * DEMO的Service測試 * @author zhuli */class userService extends Service {/** * @var userDao */private $userDao;public function __construct() {parent::__construct();$this->userDao = InitPHP::getDao("user");}/** * 擷取一個使用者 * @param int $id */public function getUser($id) {if ($id < 1) {return array();}return $this->userDao->getUser($id);}/** * 建立一個使用者 */public function createUser($user) {return $this->userDao->addUser($user);}}

4. 在Controller中調用

在Controller中調用Service,來新增和擷取一個使用者資訊

indexController需要繼承基類Controller

<?php/** * InitPHP開源架構 - DEM * @author zhuli */class indexController extends Controller {public $initphp_list = array(); //Action白名單//使用zend編輯器,變數上面加@var注釋之後,編輯器中能提示userService中的方法/** * @var userService */private $userService;public function __construct() {parent::__construct();$this->userService = InitPHP::getService("user");}public function run() {$user = array("username" => "zhuli", "password" => "123456");$id = $this->userService->createUser($user);echo "UserId:" . $id . "<br/>";$userInfo = $this->userService->getUser($id);print_r($userInfo);}}

5. 瀏覽器中結果


以上就是Dao層最簡單的使用方法。複雜的使用請見Intphp官方網站文檔:http://initphp.com/4_2.htm


國產InitPHP架構系列 - InitPHP架構搭建高可用WEB應用05:資料層Dao使用

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.