国产InitPHP框架系列 - InitPHP框架搭建高可用WEB应用05:数据层Dao使用

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

时间: 2024-10-13 17:32:56

国产InitPHP框架系列 - InitPHP框架搭建高可用WEB应用05:数据层Dao使用的相关文章

InitPHP框架搭建高可用WEB应用01:创建项目

创建Hello World项目 1. 下载框架 选择最新的版本,进行下载.框架下载地址:http://initphp 2. 创建项目目录 创建项目目录,目录示意图: 1. 文件夹initphp是最新下载的initphp框架文件夹 2. conf/comm.conf.php 放置项目配置文件 3. web/controller/ 文件夹放置控制器文件 4. index.php是项目入口文件 说明:使用initphp开发的项目是单入口,所有请求都会通过index.php进行分发. 3. index.

keepalived+Haproxy搭建高可用Web群集

Haproxy是目前比较流行的一种群集调度工具,同类群集调度工具有很多,如LVS和Nginx.相比较而言,LVS性能最好,但是搭建相对复杂,搭建LVS群集可以参考博文:搭建:LVS+Keepalived高可用Web服务群集环境:Nginx的upstream模块支持群集功能,但是相对群集节点健康检查功能不强,性能没有Haproxy好,更多的是应用在企业内网环境中.Nginx群集可以参考博文:centos 7部署Tomcat及其负载均衡配置详解. 上述几个web群集调度器属于软件类型的,还有很多硬件

搭建高可用web和数据库集群

1.项目简介即拓扑图本次设计使用keepalived与lvs搭建一个调度器集群,实现lvs调度器的高可用,当lvs调度器的master宕机后,keepalived会自动切换到backup上.调度后面的web集群,实现web集群的负载均衡,前方调度器会根据lvs算法把服务发给web集群中的主机去响应.在web集群后面搭建数据库集群,数据库设置主主结构,并添加keepalived来实现高可用.具体拓扑图如下: 2.环境准备机器名称 IP配置 服务角色 备注LVS1-master 192.168.4.

Haproxy+Keepalived(双机热备)搭建高可用web架构

1.目的搭建web高可用架构,用haproxy作为前段负载均衡分摊后端web服务器压力,Keepalived保证haproxy的存活(双机热备:一台haproxy挂了,自动切换到另外一台haproxy上)2.环境(系统均为centos7,防火墙与selinux都关闭)192.168.0.100:web1(端口7000).web2(端口8000)192.168.0.101:haproxy1.keepalived(MASTER)192.168.0.102:haproxy2.keepalived(BA

Keepalived + LVS-DR搭建高可用Web服务器集群

导航: Keepalived概述 LVS概述 编译安装keepalived 配置主调度器 双机热备 一.Keepalived概述 keepalived是一个类似于layer3, 4 & 5交换机制的软件,也就是我们平时说的第3层.第4层和第5层交换.Keepalived是自动完成,不需人工干涉,需要人工做的只是修复故障的web服务器.Layer3,4&5工作在IP/TCP协议栈的IP层,TCP层,及应用层,原理分别如下:Layer3:Keepalived使用Layer3的方式工作式时,Ke

部署LVS-DR+Keepalived搭建高可用web群集

实现LVS的DR模式 一. 实验环境 三台机器: Director节点: (ens33 192.168.10.53 vip ens33:0 192.168.10.80) Real server1: (ens33 192.168.10.51 vip lo:0 192.168.10.80) Real server2: (ens33 192.168.10.52 vip lo:0 192.168.10.80) 二. 安装和配置 1. 配置两个real server服务器 (1) 配置虚拟IP地址(VIP

linux RHCS集群 高可用web服务器

RHCS集群,高可用服务器 高可用 红帽集群套件,提供高可用性,高可靠性,负载均衡,快速的从一个节点切换到另一个节点(最多16个节点)负载均衡 通过lvs提供负载均衡,lvs将负载通过负载分配策略,将来自于客户端的请求分配到服务器节点 当某个服务器节点无法提供服务,节点将被从集群中剔除存储集群功能 rhcs通过gfs文件系统提供存储集群功能 gfs即global file system,允许多个服务同时读写一个单一的共享文件系统 通过gfs消除在应用程序间同步数据的麻烦 通过锁管理机制来协调和管

Nginx+Keepalived搭建高可用负载平衡WEB 集群

Nginx+Keepalived搭建高可用负载平衡WEB 集群 1.1环境规划: Nginx_master:192.168.5.129 Nginx_backup:192.168.5.131 Tomcat:192.168.5.132 端口:8080,9080 操作系统:CentOS6.5 x86_64 内核版本:2.6.32-696.el6.x86_64 Nginx版本:nginx/1.12.0 nginx-1.12.0 Keepalived版本:Keepalived v1.2.13 前端双Ngi

搭建高可用mongodb集群(四)—— 分片(经典)

转自:http://www.lanceyan.com/tech/arch/mongodb_shard1.html 按照上一节中<搭建高可用mongodb集群(三)-- 深入副本集>搭建后还有两个问题没有解决: 从节点每个上面的数据都是对数据库全量拷贝,从节点压力会不会过大? 数据压力大到机器支撑不了的时候能否做到自动扩展? 在系统早期,数据量还小的时候不会引起太大的问题,但是随着数据量持续增多,后续迟早会出现一台机器硬件瓶颈问题的.而mongodb主打的就是海量数据架构,他不能解决海量数据怎么