標籤: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使用