一 丶创建数据库和数据库配置
1. 数据库设计如下
SET FOREIGN_KEY_CHECKS=0;
-- ----------------------------
-- Table structure for users
-- ----------------------------
DROP TABLE IF EXISTS `users`;
CREATE TABLE `users` (
`u_id` int(255) NOT NULL AUTO_INCREMENT,
`u_name` varchar(50) NOT NULL,
`u_age` int(3) DEFAULT NULL,
`u_sex` tinyint(1) DEFAULT NULL,
PRIMARY KEY (`u_id`)
) ENGINE=MyISAM AUTO_INCREMENT=5 DEFAULT CHARSET=utf8;
2. database.php
// +----------------------------------------------------------------------
return [
// 数据库类型
'type' => 'mysql',
// 服务器地址
'hostname' => '127.0.0.1',
// 数据库名
'database' => 'singletons',
// 用户名
'username' => 'root',
// 密码
'password' => '123456',
// 端口
'hostport' => '3306',
// 连接dsn
'dsn' => '',
// 数据库连接参数
'params' => [],
// 数据库编码默认采用utf8
'charset' => 'utf8',
// 数据库表前缀
'prefix' => 'u_',
// 数据库调试模式
'debug' => true,
// 数据库部署方式:0 集中式(单一服务器),1 分布式(主从服务器)
'deploy' => 0,
// 数据库读写是否分离 主从式有效
'rw_separate' => false,
// 读写分离后 主服务器数量
'master_num' => 1,
// 指定从服务器序号
'slave_no' => '',
// 是否严格检查字段是否存在
'fields_strict' => true,
// 数据集返回类型
'resultset_type' => 'array',
// 自动写入时间戳字段
'auto_timestamp' => false,
// 时间字段取出后的默认时间格式
'datetime_format' => 'Y-m-d H:i:s',
// 是否需要进行SQL性能分析
'sql_explain' => false,
];
二 丶MVC 三者的分离
1.Controller
新建controller:Users.php
2.Model
新建model文件Users.php
3.View
新建users文件夹并新建index.html文件
三丶tp5单例模式的代码实现
1.为什么要使用单例模式
使用单例模式实现逻辑处理与数据库操作分离能很大提升mysql的sql处理能力,并且易于维护
2.controller只处理逻辑,model只处理数据库操作
3.实例,代码如下
HTML:
TP5.0单例模式
路由设置
// +----------------------------------------------------------------------
Route::rule('add','users/add','GET'); // 添加
Route::rule('del','users/del','GET'); // 删除
Route::rule('update','users/update','GET'); // 更新
Route::rule('query','users/query','GET');// 查询
Route::rule('batchupdate','users/batchupdate','GET'); // 更新多个
Controller
success("插入".$u_name."成功");
}
else{
$this->error("插入".$u_name."失败");
}
}
/**
* 删除一条数据(硬删除)
*/
public function del()
{
$u_id = intval(input('id'));
$delOne = UsersModel::deleteOne($u_id);
if($delOne)
{
$this->success("删除".$u_id."成功");
}
else{
$this->error("删除".$u_id."失败");
}
}
/**
* 更新
*/
public function update()
{
$u_id = intval(input('id'));
$u_age = 18;
$updateOne = UsersModel::updateOne($u_id,$u_age);
if($updateOne)
{
$this->success("更新".$u_id."的年龄为".$u_age."成功");
}
else{
$this->error("更新".$u_id."的年龄为".$u_age."失败");
}
}
/**
* 查询
*/
public function query()
{
$filed = "u_id,u_age"; //多个字段以逗号隔开
$u_id = "";
$query = UsersModel::query($filed,$u_id);
dump($query);
}
/**
* 批量修改
*/
public function batchupdate()
{
$array = array(array('u_id'=>1,'u_name'=>'deng','u_age'=>18,'u_sex'=>1),array('u_id'=>2,'u_name'=>'yuan','u_age'=>19,'u_sex'=>2));
$updateall = UsersModel::batchUpdate($arr);
if($updateall)
{
$this->success("success");
}
else{
$this->error("error");
}
}
}
Model SQL处理 使用static修饰
execute("insert into users(u_id,u_name,u_age,u_sex) value(".$uid.",'".$uname."',".$uage.",".$usex.")");
if($inserttheone)
{
return true;
}
else{
return false;
}
}
/**
* 删除一条数据
*/
public static function deleteOne($uid)
{
$delone = self::getInstance()->execute("delete from users where u_id = ".$uid."");
if($delone)
{
return true;
}
else{
return false;
}
}
/**
* 修改一条数据
*/
public static function updateOne($uid,$age)
{
$updateone = self::getInstance()->execute("update users set u_age = ".$age." where u_uid = ".$uid."");
if($updateone)
{
return true;
}
else{
return false;
}
}
/**
* 查询
*/
public static function query($defaultField,$uid)
{
if($defaultField == '' || empty($defaultField) || is_null($defaultField)){
$defaultField = '*';
}
if($uid == '' || empty($uid) || is_null($uid)){
$uid = '';
}
else{
$uid = "where u_id = $uid";
}
return self::getInstance()->query("select $defaultField from users $uid");
}
/**
* 批量修改
*/
public static function batchUpdate($arr)
{
foreach ($arr as $key => $value) {
$updatearr = self::getInstance()->execute("update users set u_name = '".$value['u_name']."',u_age = ".$value['u_age'].",u_sex = ".$value['u_sex']." where u_uid = ".$uid."");
if($updatearr)
{
return true;
}
else{
return false;
}
}
}
}
四丶以上就是使用单例模式来处理model的一些SQL处理,避免了重复实例化Model类,从而提升SQL处理能力,在tp5中控制器表名model只要一一对应就可以拿来直接用,相对来讲还是比较方便