什么是Bean
Bean我们可以想成数据表的一行数据在代码中的一个实体。
Bean与Dao区别:
Dao是处理表,而Bean是对表某一行数据进行处理和获取,一个Bean文件代表数据表的一行数据,一个Dao文件代表一个表。
示例如下:
比如:我们有个users
表里面有addtime
字段,类型是时间戳.
1.在没有Bean情况下
在没有Bean情况我们是不是要在Dao文件读取users
表里面的addtime
字段将取出来在进行时间戳转换成时间。
代码如下:
1.新建Dao文件application/classes/Dao/Users.php
class Dao_User extends Soter_Dao {
public function getTable(){
return 'users';
}
public function getPrimaryKey(){
return 'id';
}
public function getColumns(){
return array(
'id'//标识
,'username'//用户名
,'addtime'//添加时间
);
}
public function getAddTime(){
$table = $this->getTable();
$addtime = Sr::db()->select('addtime')
->from($table)
->limit(0,1)
->execute()
->value('addtime');
$addtime = date('Y-m-d H:i:s', $addtime);
return $addtime;
}
}
2.在有Bean情况下
在有Bean情况现在我们创建Bean文件,在getAddtime
函数里面进行时间戳转化,
然后我们在Dao文件select查询调用object
方法(详细可以查看数据库手册的查询结果集的使用)来读取我们创建Bean文件。
代码如下:
1.新建Bean文件application/classes/Bean/Users.php
class Bean_Users extends Soter_Bean {
//标识
private $id;
//用户名
private $username;
//添加时间
private $addtime;
public function getId() {
return $this->id;
}
public function setId($id) {
$this->id = $id;
return $this;
}
public function getUsername() {
return $this->username;
}
public function setUsername($username) {
$this->username = $username;
return $this;
}
public function getAddtime() {
return date('Y-m-d H:i:s', $this->addtime);
}
public function setAddtime($addtime) {
$this->addtime = $addtime;
return $this;
}
}
2.新建Dao文件application/classes/Dao/Users.php
class Dao_User extends Soter_Dao {
public function getTable(){
return 'users';
}
public function getPrimaryKey(){
return 'id';
}
public function getColumns(){
return array(
'id'//标识
,'username'//用户名
,'addtime'//添加时间
);
}
public function getAddTime(){
$table = $this->getTable();
$users = Sr::db()->select('addtime')
->from($table)
->limit(0,1)
->execute()
->object('Users');
return $users->getAddtime();
}
}
从上面代码可以看到使用bean+dao模式,降低了程序的复杂度和耦合度,增强了可维护性。
提示:
了解详细的Dao层,点击进入Dao层
创建自己的Bean实体
下面我们自定义一个Bean实体
1.创建test_bean数据库
2.执行以下sql:
create database test_bean CHARACTER SET utf8 COLLATE utf8_general_ci;
3.创建user数据表
4.执行以下sql:
DROP TABLE IF EXISTS `user`;
CREATE TABLE `user` (
`id` int(11) NOT NULL AUTO_INCREMENT COMMENT '标识',
`username` varchar(20) NOT NULL COMMENT '用户名',
`addtime` int(10) NOT NULL COMMENT '添加时间',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
INSERT INTO `user` VALUES ('1', '刘一', '1420041600');
INSERT INTO `user` VALUES ('2', '陈二', '1422806400');
INSERT INTO `user` VALUES ('3', '张三', '1425312000');
INSERT INTO `user` VALUES ('4', '李四', '1428076800');
5.修改数据库配置文件application/config/default/database.php
6.修改一下代码
'mysql' => array(
'database' => 'test_bean',
'masters' => array(
'master01' => array(
'hostname' => '127.0.0.1',
'port' => 3306,
'username' => '用户名',
'password' => '密码',
)
),
),
详细请看数据库手册的“数据库配置信息说明”
7.新建Bean文件application/classes/Bean/User.php
8.输入以下代码:
<?php
class Bean_User extends Soter_Bean {
//标识
private $id;
//用户名
private $username;
//添加时间
private $addtime;
public function getId() {
return $this->id;
}
public function setId($id) {
$this->id = $id;
return $this;
}
public function getUsername() {
return $this->username;
}
public function setUsername($username) {
$this->username = $username;
return $this;
}
public function getAddtime() {
date_default_timezone_set('Asia/Shanghai');
return date('Y-m-d H:i:s', $this->addtime);
}
public function setAddtime($addtime) {
$this->addtime = $addtime;
return $this;
}
}
9.新建Dao文件application/classes/Dao/User.php
10.输入以下代码:
<?php
class Dao_User extends Soter_Dao {
public function getColumns() {
return array(
'id'//标识
,'username'//用户名
,'addtime'//添加时间
);
}
public function getPrimaryKey() {
return 'id';
}
public function getTable() {
return 'user';
}
//这里我们做一个简单查询,详细可以查看“数据库手册”的“查询数据”和“查询结果集的使用”
public function getAddTime(){
$table = $this->getTable();
$user = Sr::db()->select('*')
->from($table)
->limit(0,1)
->execute()
->object('User');
return $user->getAddtime();
}
}
11.新建控制器文件application/classes/Controller/Welcome.php
12.输入以下代码:
<?php
class Controller_Welcome extends Soter_Controller {
public function do_dao() {
$dao = Sr::dao('User');
echo $dao->getAddTime();
}
}
13.浏览器访问:http://127.0.0.1/index.php/Welcome/dao.do
//将输出:2015-01-01 00:00:00
为什么会输出“2015-01-01 00:00:00”?
我们可以从上面例子看Controller_Welcome控制器类,
在do_dao方法里面做了加载Dao层中的Dao_User
类赋值给$dao。
通过$dao输出Dao_User
类中的getAddTime方法,getAddTime方法做简单的查询。
在去调用Bean实体中的Bean_User
类赋值给$user.
最后通过$user变量去调用Bean_User
类中getAddtime
方法,getAddtime
方法把$this->addtime
属性转成时间。
所以浏览器才会显示“2015-01-01 00:00:00”。