日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術(shù)文章
文章詳情頁

常見 PHP ORM 框架與簡單代碼實現(xiàn)

瀏覽:120日期:2022-09-13 14:02:08

對象關(guān)系映射(Object Relational Mapping,簡稱ORM)是一種為了解決面向?qū)ο笈c關(guān)系數(shù)據(jù)庫存在的互不匹配的現(xiàn)象的技術(shù)。 簡單的說,ORM是通過使用描述對象和數(shù)據(jù)庫之間映射的元數(shù)據(jù),將程序中的對象自動持久化到關(guān)系數(shù)據(jù)庫中。本質(zhì)上就是將數(shù)據(jù)從一種形式轉(zhuǎn)換到另外一種形式。

ORM提供了所有SQL語句的生成,代碼人員遠(yuǎn)離了數(shù)據(jù)庫概念。從一個概念需求(例如一個HQL)映射為一個SQL語句,并不需要什么代價,連1%的性能損失都沒有。真正的性能損失在映射過程中,更具體地講,是在對象實例化的過程中。

目前PHP 開源比較有名的 ORM 有以下幾個:

1、Propel

Propel是一個適用于PHP5的ORM映射(Object Relational Mapping)框架,它基于Apache Torque提供對象持久層支持。它通過XML格式的模式定義文件和相應(yīng)的配置文件來生成SQL和類,它允許你使用對象代替SQL來讀寫數(shù)據(jù)庫表中的記錄。Propel提供一個生成器來為你的數(shù)據(jù)模型創(chuàng)建SQL定義文件和PHP類。開發(fā)者也可以十分簡單的定制生成的類,我們還可以通過XML, PHP類和Phing構(gòu)建工具把Propel集成到已有的應(yīng)用開發(fā)框架中去.例如PHP框架symfony的1.2以前的版本就是默認(rèn)使用了精簡版的Propel作為默認(rèn)ORM框架。

官方網(wǎng)站:http://www.propelorm.org/

2、Doctrine

Doctrine是一個PHP的ORM框架,它必須運(yùn)行在>=php5.2.3版本上,它是一個功能強(qiáng)大的數(shù)據(jù)抽象層。

它的一個主要特征就是使用面向?qū)ο蟮姆绞絹韺崿F(xiàn)數(shù)據(jù)庫查詢的封轉(zhuǎn),它底層通過一個類似 Hibernate HQL的DQL的查詢語句進(jìn)行數(shù)據(jù)庫查詢,這使得開發(fā)的靈活性更強(qiáng),大大減小了重復(fù)代碼。相比Propel,Doctrine的優(yōu)點在于它支持支持全文檢索,Doctrine的文檔一直就比Propel要全面豐富,社區(qū)更活躍,而且使用起來更加自然、更易閱讀、更接近原生SQL。性能方面也略微優(yōu)于Propel。同樣你也可以可以很方便的把Doctrine集成到現(xiàn)有的應(yīng)用框架中去,比如PHP框架symfony的1.3以后的版本將Doctrine作為默認(rèn)的ORM框架,同時也可以將Doctrine和Codeigniter整合起來。

官方網(wǎng)站: http://www.doctrine-project.org/

3、EZPDO

EZPDO是一個十分輕量級的PHP ORM框架。EZPDO的作者的本意旨在降低復(fù)雜的ORM學(xué)習(xí)曲線,盡可能在ORM的運(yùn)行效率和功能之間做一個平衡點,它是我至今用過的最簡單的ORM框架,我目前還想將它集成到我的CoolPHP SDK中來,而且運(yùn)行效率相當(dāng)不錯,功能也基本能滿足需求,只不過EZPDO的更新比較緩慢。

官方網(wǎng)站:http://www.ezpdo.net/

4、RedBean

RedBean是一個易于使用,輕量級PHP ORM框架,提供對MySQL, SQLite&PostgreSQL的支持。RedBean架構(gòu)非常靈活,核心也非常簡約,開發(fā)者可以很方便的通過插件來擴(kuò)展功能。

官方網(wǎng)站:http://www.redbeanphp.com/

5、其他

國內(nèi)的fleaphp開發(fā)框架基于TableDataGateway實現(xiàn)ORM實現(xiàn);Zend Framework除了提供對 SQL 語句的封裝以外,也同樣實現(xiàn)了TableGateway、TableRowSet、TableRow的實現(xiàn);還有一些類似Rails的ActiveRecord實現(xiàn)的解決方案。

總的來說,一般ORM框架對付簡單的應(yīng)用系統(tǒng)來說都能滿足基本需求,可以大大降低開發(fā)難度,提高開發(fā)效率,但是它在SQL優(yōu)化方面,肯定是比純SQL語言要差一些,對復(fù)雜關(guān)聯(lián)、SQL內(nèi)嵌表達(dá)式的處理可能不是很理想。也許這主要是由于PHP本身對象持久化的問題,導(dǎo)致ORM效率過低,普遍比純SQL要慢。但是這些都是有辦法解決的,最基本的解決性能的方案,我們可以通過緩存來提高效率,Hibernate來說,雖然配置比較繁雜,但是它通過靈活的使用二級緩存和查詢緩存極大的緩解數(shù)據(jù)庫的查詢壓力,極大的提升了系統(tǒng)的性能。

如果你想自己實現(xiàn)一個PHP的ORM,下面的可以參考下:

<?phpabstract class Model{ protected $pk = ’id’; protected $_ID = null; protected $_tableName; protected $_arRelationMap; protected $_modifyMap; protected $is_load = false; protected $_blForDeletion; protected $_DB; public function __consturct($id = null){ $this->_DB = mysql_connect(’127.0.0.1’,’root’,’’) ; $this->_tableName = $this->getTableName(); $this->_arRelationMap = $this->getRelationMap(); if(isset($id))$this->_ID = $id; } abstract protected function getTableName(); abstract protected function getRelationMap(); public function Load(){ if(isset($this->_ID)){ $sql = 'SELECT '; foreach($this->_arRelationMap as $k => $v){ $sql .= ’`’.$k.’`,’; } $sql .= substr($sql,0,strlen($sql)-1); $sql .= 'FROM '.$this->_tableName.' WHERE '.$this->pk.' = '.$this->_ID; $result =$this->_DB->mysql_query($sql); foreach($result[0] as $k1 => $v1){ $member = $this->_arRelationMap[$key]; if(property_exists($this,$member)){ if(is_numeric($member)){ eval(’$this->’.$member.’ = ’.$value.’;’); }else{ eval(’$this->’.$member.’ = '’.$value.’';’); } } } } $this->is_load = true; } public function __call($method,$param){ $type = substr($method,0,3); $member = substr($method,3); switch($type){ case ’get’: return $this->getMember($member); break; case ’set’: return $this->setMember($member,$param[0]); } return false; } public function setMember($key){ if(property_exists($this,$key)){ if(is_numeric($val)){ eval(’$this->’.$key.’ = ’.$val.’;’); }else{ eval(’$this->’.$key.’ = '’.$val.’';’); } $this->_modifyMap[$key] = 1; }else{ return false; } } public function getMember($key,$val){ if(!$this->is_load){ $this->Load(); } if(property_exists($this,$key)){ eval(’$res = $this->’.$key.’;’ ); return $this->$key; } return false; } public function save(){ if(isset($this->_ID)){ $sql = 'UPDATE '.$this->_tableName.' SET '; foreach($this->arRelationMap as $k2 => $v2){ if(array_key_exists( $k2, $this->_modifyMap)){ eval( ’$val = $this->’.$v2.’;’); $sql_update .= $v2.' = '.$val; } } $sql .= substr($sql_update,0,strlen($sql_update)); $sql .= ’WHERE ’.$this->pk.’ = ’.$this->_ID; }else{ $sql = 'INSERT INTO '.$this->_tableName.' ('; foreach($this->arRelationMap as $k3 => $v3){ if(array_key_exists( $k3,$this->_modifyMap)){ eval(’$val = $this->’.$v3.’;’); $field .= '`'.$v3.'`,'; $values .= $val; } } $fields = substr($field,0,strlen($field)-1); $vals = substr($values,0,strlen($values)-1); $sql .= $fields.' ) VALUES ('.$vals.')'; } echo $sql; //$this->_DB->query($sql); } public function __destory(){ if(isset($this->ID)){ $sql = 'DELETE FROM '.$this->_tableName.' WHERE '.$this->pk.' = '.$this->_ID;// $this->_DB_query($sql); } }}class User extends Model{ protected function getTableName(){ return 'test_user'; } protected function getRelationMap(){return array( ’id’ => USER_ID, ’user_name’=> USER_NAME, ’user_age’ => USER_AGE ); } public function getDB(){ return $this->_DB; }}$UserIns = new User();print_r($UserIns);?>

標(biāo)簽: PHP
相關(guān)文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
日本精品久久| 日本久久一区| 免费视频亚洲| 日本欧洲一区二区| 国产精久久一区二区| 99久久精品网站| 亚洲精品日本| 在线天堂资源www在线污| 欧洲毛片在线视频免费观看| 蜜桃视频在线观看一区二区| 国产图片一区| 婷婷国产精品| 777久久精品| 免费污视频在线一区| 亚洲午夜国产成人| 91亚洲人成网污www| 一区二区三区国产在线| 首页国产精品| 日本在线视频一区二区| 91精品国产91久久久久久黑人| 亚洲免费福利一区| 日韩高清欧美| 欧美一区激情| 亚洲欧洲另类| 成人欧美一区二区三区的电影| 日韩一区二区久久| 精品久久电影| 日韩一区二区三区精品| 日本欧美不卡| 欧美亚洲免费| 国产视频久久| 日韩精品免费一区二区在线观看| 国产亚洲一卡2卡3卡4卡新区| 欧洲激情综合| 激情黄产视频在线免费观看| 日本精品国产| 欧美精选一区二区三区| 久久精品国产福利| 中文字幕免费一区二区| 日韩精品一区二区三区免费观影 | 国产欧美综合一区二区三区| 2023国产精品久久久精品双| 久久三级中文| 国产日韩欧美三区| 在线观看亚洲精品福利片| 久久精品欧美一区| 国产在视频一区二区三区吞精| 日韩欧美在线精品| 亚洲综合不卡| 久久精品国产68国产精品亚洲| 久久精品福利| 欧美日韩在线精品一区二区三区激情综合 | 国产欧美高清| 亚洲欧美日韩一区在线观看| 亚洲黄色中文字幕| 精品一区二区三区四区五区| 欧美精品三级在线| 日韩中文字幕一区二区高清99| 久久久天天操| 日本а中文在线天堂| 精品在线网站观看| 欧美xxxx性| 国产日韩欧美一区二区三区在线观看 | 欧洲av一区二区| 精品美女视频| 国产精品大片免费观看| 91成人精品观看| 国产欧美日韩免费观看| 日本一区中文字幕| 日韩中文av| 天堂va欧美ⅴa亚洲va一国产| 亚洲久久一区| 亚洲欧洲日韩精品在线| 在线视频亚洲欧美中文| 蜜臀久久99精品久久久画质超高清| 国产麻豆综合| 香蕉久久夜色精品国产| 蜜桃av一区| 亚洲最大av| 久久激五月天综合精品| 日韩成人午夜精品| 久久精品 人人爱| 久久久91麻豆精品国产一区| 免费看一区二区三区| 欧美日韩亚洲一区三区| 热久久久久久| 欧美精品导航| 欧美韩日一区| 精品一区二区三区免费看| 国产麻豆精品| 91嫩草精品| 日本欧美在线| 日韩在线观看中文字幕| 久久亚洲不卡| 蜜桃视频第一区免费观看| 亚洲欧洲午夜| 久久国产高清| 亚洲精品日本| 美女免费视频一区| 国产a久久精品一区二区三区| 欧美精品二区| 日韩精品欧美| 亚洲欧美久久久| 影院欧美亚洲| 国产一区观看| 激情婷婷综合| 蜜臀a∨国产成人精品| 天堂av一区| 精品一区二区男人吃奶| 国产成人精品一区二区三区在线| 国产精品久久久久久久免费观看 | 国产亚洲高清在线观看| 精品视频99| 电影天堂国产精品| 亚洲福利国产| 日韩视频久久| 色老板在线视频一区二区| 欧美日韩精品免费观看视完整 | 久久精品国产68国产精品亚洲| 国产精品婷婷| 国产精品毛片aⅴ一区二区三区| 水蜜桃久久夜色精品一区| 国产在线成人| 亚洲精品福利| 国产精品久久观看| 久热精品在线| 国产精品扒开腿做爽爽爽软件| 福利一区和二区| 99成人在线| 久久99久久人婷婷精品综合| 群体交乱之放荡娇妻一区二区| 欧美日韩国产亚洲一区| 日韩在线一区二区| 国产日产精品_国产精品毛片| 欧美1区二区| 久久中文字幕av| 日产欧产美韩系列久久99| 国产一区二区三区视频在线| 日韩午夜av在线| 久久精品三级| 免费在线观看成人| 国产在视频一区二区三区吞精| 蜜桃一区二区三区| 欧美日韩亚洲一区在线观看| 免费一二一二在线视频| 久久国产精品毛片| 精品国产欧美| 亚洲欧美网站在线观看| 精品视频在线你懂得| 99pao成人国产永久免费视频| 国产精品玖玖玖在线资源| 欧美粗暴jizz性欧美20| 欧美视频久久| 亚洲国产综合在线看不卡| 日韩精品一页| 久久久久网站| 中文字幕日本一区| 久久网站免费观看| 国产精品日韩精品中文字幕| 精品欧美久久| 精品一二三区| 日本精品另类| 亚洲女同中文字幕| 精品国产乱码| 欧美一区成人| 久久国产高清| 亚洲福利久久| 久久久久久网| 国产精品高潮呻吟久久久久| 蜜桃一区二区三区在线| 九九综合在线| 91精品蜜臀一区二区三区在线 | 久久亚洲国产精品一区二区| 免费高潮视频95在线观看网站| 国产精品777777在线播放 | 国产综合色区在线观看| 精品资源在线| 国产日韩欧美在线播放不卡| 亚洲精选91| 亚洲免费婷婷| 欧美~级网站不卡| 精品视频99| 国产精品久久久久9999高清| 亚洲精品在线观看91| 五月天av在线| 精品一区二区三区中文字幕在线| 欧美日韩一区二区三区不卡视频 | 久久精品72免费观看| 日本不卡视频在线观看| 黄色免费成人| 国内精品福利| 欧美一区二区三区激情视频| 日韩欧美另类一区二区| 伊人网在线播放| 青青青免费在线视频| 精品视频在线一区二区在线| 免费一级欧美在线观看视频| 欧美一区自拍| 国产精品亚洲人成在99www| 日韩av资源网|