ORM----Oriented Relationship Mapper,即用面向对象的方式来操作数据库。归根结底,还是对于SQL语句的封装。

首先,我们的数据库有如下一张表:

我们希望能够对这张表,利用setUserid("11111"),即可以设置userid;getUserid()既可以获得对象的userid。所以,我们需要建立model对象,与数据库中的表对应。

由于每张表所对应的model都应该是有set/get操作,所以,我们用一个父类BasicModel进行定义。其他model都是继承至这个model。

BasicModel的代码如下:

* function:Model类的基类,封装set/get操作*/

classBasicModel{private $map = null;functionTbUser() {$this->map = array();

}function __set($key,$value){$this->map[$key] = $value;

}function __get($key){return $this->map[$key];

}function __call($name,$arguments) {if(substr($name,0,3)=='set'){$this->__set(strtolower(substr($name,3)),$arguments[0]);

}else{return $this->__get(strtolower(substr($name,3)));

}

}

}?>

那么,与tb_user表相互对应的model类TbUser则对它进行继承。

}?>

这样,我们就可以对TbUser的实例进行set/get操作了。

要用ORM进行操作数据库,就必须可以findByWhere($where)进行查询,返回的为对象数组;save($tbUser)进行保存;delete($obj)进行删除;update($obj)进行更新操作。

本质上,就是用户传入的是对象,我们再利用代码将对象转换为SQL语句。本质上,执行的还是SQL语句。

所以,我们对一系列的操作用接口表示。IBasicDAO的代码如下:

}?>

我们最关键,就是对此接口进行实现。完成对象和SQL的转换。

BasicDAO的代码如下:

public functiongetConnection(){$conn = mysqli_connect($this->h,$this->user,$this->pass,$this->db);return $conn;

}//初始化

public functioninit() {//根据model的名字得到表的名字

$this->tableName = strtolower(substr($this->modelName,0,2))."_".strtolower(substr($this->modelName,2));

}//获得一个表的列名

public function getColumn($tableName) {$sql = "show columns from ".$tableName;$conn = $this->getConnection();$columns = array();if($conn!=null){$rtn = mysqli_query($conn,$sql);while($rtn!==false&&($row=mysqli_fetch_array($rtn))!=null){$columns[] = $row[0];

}mysqli_close($conn);

}return $columns;

}//条件查询

public function findByWhere($where){//获得数据表的列名

$columns = $this->getColumn($this->tableName);//拼接sql语句

$sql = "select * from ".$this->tableName." where ".$where;$conn = $this->getConnection();$arr = array();if($conn!=null){$rtn = mysqli_query($conn,$sql);while($rtn!==false&&($row=mysqli_fetch_array($rtn))!=null){$index = -1;$obj = new $this->modelName();foreach($columns as $column){$obj->{"set".ucfirst($column)}($row[++$index]);

}$arr[] = $obj;

}mysqli_close($conn);

}return $arr;

}//分页查询;支持排序

public function findWhereOrderBy($where,$order,$start=null,$limit=null){//获得数据表的列名

$columns = $this->getColumn($this->tableName);//拼接sql语句

$sql = "select * from ".$this->tableName." where ".$where." order by ".$order;if($start!=null&&$limit!=null){$sql .= "limit ".$start.",".$limit;

}$conn = $this->getConnection();$arr = array();if($conn!=null){$rtn = mysqli_query($conn,$sql);while($rtn!==false&&($row=mysqli_fetch_array($rtn))!=null){$index = -1;$obj = new $this->modelName();foreach($columns as $column){$obj->{"set".ucfirst($column)}($row[++$index]);

}$arr[] = $obj;

}mysqli_close($conn);

}return $arr;

}//保存操作

public function save($obj){$columns = $this->getColumn($this->tableName);$conn = $this->getConnection();$tag = false;if($conn!=null){$sql = "insert into ".$this->tableName."(";foreach($columns as $column){$sql .= $column.",";

}$sql = substr($sql,0,strlen($sql)-1).") values(";foreach($columns as $column){$value = $obj->{"get".ucfirst($column)}();//判断$value的类型

if($value==null){$sql .= "null,";

}else if(preg_match("/^[0-9]*$/", $value)){//是数字

$sql .= $value.",";

}else{$sql .= "'".$value."',";

}

}$sql = substr($sql,0,strlen($sql)-1);$sql .= ")";//执行sql语句

mysqli_query($conn,$sql);$tag = true;mysqli_close($conn);

}return $tag;

}//删除操作

public function delete($obj){$conn = $this->getConnection();$tag = false;if($conn!=null){$sql = "delete from ".$this->tableName." where ";$columns = $this->getColumn($this->tableName);$value = $obj->{"get".ucfirst($columns[0])}();if($value!=null){//是数字

if(preg_match("/^[0-9]*$/", $value)){$sql .= $columns[0]."=".$value;

}else{$sql .= $columns[0]."='".$value."'";

}//执行

mysqli_query($conn,$sql);$tag = true;

}mysqli_close($conn);

}return $tag;

}//更新操作

public function update($obj){$conn = $this->getConnection();$columns = $this->getColumn($this->tableName);$tag = false;if($conn!=null){$sql = "update ".$this->tableName." set ";for($i=1;$i{"get".ucfirst($columns[$i])}();if($value==null){$sql .= $column."=null,";

}else if(preg_match("/^[0-9]*$/",$value)){$sql .= $column."=".$value.",";

}else{$sql .= $column."='".$value."',";

}

}$sql = substr($sql,0,strlen($sql)-1);$sql .= " where ";$tempColumn = $columns[0];$tempValue = $obj->{"get".ucfirst($columns[0])}();if(preg_match("/^[0-9]*$/", $tempValue)){$sql .= $tempColumn."=".$tempValue;

}else{$sql .= $tempColumn."='".$tempValue."'";

}//执行操作

mysqli_query($conn,$sql);$tag = true;mysqli_close($conn);

}return $tag;

}

}?>

那么,对tb_user表进行操作时,主要利用的是TbUserDAO,它将modelName设置为"TbUser",代码就得知操作的表为tb_user,然后就可以进行一系列操作了。

<?phprequire_once ("BasicDAO.php");require_once("../model/TbUser.php");class TbUserDAO extendsBasicDAO{functionTbUserDAO(){$this->modelName = 'TbUser';

parent::init();

}

}?>

那么,就可以采用面向对象的方式对数据库进行操作了。

如:

$tbUserDAO = new TbUserDAO();

$tbUser = new TbUser();

$tbUser->setUserid("fetchingsoft@163.com");

$tbUser->setUsername("fetching");

$tbUserDAO->update($tbUser);

echo "执行成功!";

print_r($list);

这样对数据库中的记录进行更新。

php mysql orm_PHP ORM操作MySQL数据库相关推荐

  1. Spring boot(web 组件,ORM 操作 MySQL,接口架构风格—RESTful,集成 Redis,集成 Dubbo,打包)

    文章目录 1.3 第三章 Spring Boot 和 web 组件 1.3.1 SpringBoot 中拦截器 1.3.2 Spring Boot 中使用 Servlet 1.3.3 Spring B ...

  2. flask mysql orm_Flask笔记:数据库ORM操作MySQL+pymysql/mysql-python+SQLAlchemy/Flask-SQLAlchemy...

    Python中使用sqlalchemy插件可以实现ORM(Object Relationship Mapping,模型关系映射)框架,而Flask中的flask-sqlalchemy其实就是在sqla ...

  3. python封装类连接mysql数据_python操作mysql数据库基本类封装

    # -*- coding: UTF-8 -*- import MySQLdb as mdb class MysqldbHelper(object): """操作mysql ...

  4. mysql 四大基础操作_mysql数据库的基本操作

    mysql数据库的基本操作 首先我们要把mysql装好 mkdir chen/ mount.cifs //192.168.100.23/LNMP chen/ [root@localhost ~]# y ...

  5. shell mysql e_shell脚本操作mysql数据库,使用mysql的-e参数可以执行各种sql的(创建,删除,增,删,改、查)等各种操作...

    mysql  -hhostname -Pport -uusername -ppassword  -e  相关mysql的sql语句,不用在mysql的提示符下运行mysql,即可以在shell中操作m ...

  6. shell mysql e_shell脚本操作mysql数据库

    使用 mysql -e 参数可以执行各种 sql 的各种操作语句.不用在mysql的提示符下运行mysql,即可以在shell中操作mysql的方法. 格式:mysql  -hhostname -Pp ...

  7. php操作mysql数据_PHP - 操作MySQL数据库

    第16章 PHP操作MySQL 学习要点: 1.PHP连接到MySQL 2.增删改查 3.其他常用函数 如果你已经具有了使用PHP.SQL和MySQL的丰富经验,现在就可以把所有这些技术组合在一起.P ...

  8. linux shell操作mysql,Linux shell操作mysql数据库的方法

    摘要 腾兴网为您分享:Linux shell操作mysql数据库的方法,鱼乐贝贝,宜信,嘻嘻动漫,西餐菜谱等软件知识,以及包装效果图,德州人社,evasi0n.com,ios迅雷,民革e家,动态表情, ...

  9. java mysql nclob_java语言操作Oracle数据库中的CLOB数据类型 (转)

    java语言操作Oracle数据库中的CLOB数据类型 (转)[@more@] 有关字段类型的相关信息可以查阅oracle技术网.下面摘抄一些有关blob.clob等类型的说明.又便于大家的了解. 字 ...

最新文章

  1. python querystring encode_Java UriUtils.encodeQueryParam方法代碼示例
  2. RHEL7 修改SSH默认端口
  3. 【SSH进阶】No result defined for action **的解决方案
  4. Android:实现弹窗效果
  5. 善用佳软推荐几个很好用的软件以备使用
  6. diamond简介和搭建
  7. 视频截取软件哪个好用?免费的视频截取软件分享
  8. 内存继续涨价 LPDDR4/LPDDR4X内存标准升级
  9. w ndows10用多大c盘,安装win10系统c盘要多大才够用
  10. 重标极差分析 Hurst指数计算
  11. 计算机常用英语词汇 短语,四级英语常用词汇短语
  12. 按虚拟化对象划分,实现虚拟化存储的方式,主要包含哪几种?
  13. jeecg官网(jeecg官网 ios开发)
  14. PyWiFi 文档说明
  15. python获取网页链接地址
  16. 服装ERP软件体系究竟差在哪里?
  17. 应用、permission、资源
  18. vs2019无法连接到远程服务器,VS2019无法添加引用问题
  19. Spark物理计划和CBO和AQE
  20. js添加多marker 高德地图_【高德地图API】从零开始学高德JS API(三)覆盖物——标注|折线|多边形|信息窗口|聚合marker|麻点图|图片覆盖物...

热门文章

  1. linux刷新磁盘的命令,sync命令 – 刷新文件系统缓冲区
  2. matlab中sinks,MATLAB Simulink模块库详解(二)Sinks篇
  3. R语言使用apriori算法进行关联规则挖掘实战:关联规则概念、频繁项集、支持度(support)、置信度(confidence)、提升度(lift)、apriori算法
  4. R语言ggplot2可视化自定义可视化结果的背景色(background color)实战:改变整个画板(panel)的背景色、改变图像(plot)区域的背景色
  5. R语言scale_colour_brewer()函数和scale_fill_brewer()函数调色板及填充ggplot2图像实战
  6. 影像组学视频学习笔记(18)-使用MRIcroGL软件格式转换、勾画ROI、Li‘s have a solution and plan.
  7. CentOS包管理器yum
  8. Linux grep 命令
  9. 连接php的作用是什么,什么是超链接,有什么作用
  10. Linux系统介绍 文本查看、操作、统计命令(head/tail cat/tac less/more • wc sort uniq • cut paste)