Bean实体
  1. 什么是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层
  2. Bean实体规范

    1.Bean类文件都放在application/classes/Bean文件夹里面
    2.Bean必须要继承Soter_Bean类,类名必须带Bean_前缀。
    3.Bean是表的一行记录绑定的,每个表字段都有对应Bean的set方法和get方法,set方法和get方法都有规范
    set规范是set+不含下划线单词首字母大写的表字段名称。
    比如:表字段名称是:account_id,那么Bean的set方法名称就应该是setAccountId;
    比如:表字段名称是:phone,那么Bean的set方法名称就应该是setPhone;
    get规范是get+不含下划线单词首字母大写的表字段名称。
    比如:表字段名称是:account_id,那么Bean的get方法名称就应该是getAccountId;
    比如:表字段名称是:phone,那么Bean的get方法名称就应该是getPhone;
    比如我有以下这样表:
                                                    CREATE TABLE `user` (
                                                            `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '标识',
                                                            `username` varchar(20) NOT NULL COMMENT '用户名',
                                                            PRIMARY KEY (`id`)
                                                    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
                                            
    示例如下:
    1.新建Bean文件application/classes/Bean/User.php
    2.输入以下代码:
                                                    <?php
    
                                                    class Bean_User extends Soter_Bean {
                                                            //标识
                                                            private $id;
                                                            //用户名
                                                            private $username;
    
                                                            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;
                                                            }
                                                    }
                                            
  3. 使用Bean实体

    我们可以在select查询结果集的objectsobject方法进行读取Bean文件,详细介绍请看数据库手册的"查询结果集的使用"。
    示例如下:
    1.新建Dao文件application/classes/Bean/Users.php
                                                    <?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.新建控制器文件application/classes/Controller/Welcome.php
                                                    <?php
    
                                                    class Controller_Welcome extends Soter_Controller {
    
                                                            public function do_object() {
                                                                    echo Sr::db()->select('*')->from('users')->execute()->object('Users')->getAddtime();
                                                            }
                                                            
                                                            public function do_objects() {
                                                                    $users = Sr::db()->select('*')->from('users')->execute()->objects('Users');
                                                                    Sr::dump($users);
                                                            }
                                                    } 
                                            
    提示:
    了解详细的数据库手册,点击进入数据库手册
  4. 创建自己的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”。