ThinkPHP 5 (四):数据库中间层分析和ORM

一:简单数据库访问层 

时光疯子博客

二:ThinkPHP 5数据库访问层

    

时光疯子博客

    1:Db 、Collection

        Db是数据库操作统一的入口对象,包含有连接数据库任务。Db内部实例了一个Collection对象,来连接数据库。

        Collection 是使用PDO连接,惰性连接,并不是真正的去连接这么一个状态,而是一个待命状态,执行sql语句的时候,真正连接数据库,这么做好处是节约服务器数据库资源。


    2:Query 查询器、Builder

        Query查询器是对curd一种封装,统一了不同数据的一个操作。

        通过Builder把query翻译成原生的sql给Collection,再执行数据库操作。


    3:Driver

        Driver提供了几个不同的类,每个类负责一种数据库连接。

        同一个标准的query查询器,用不同的Builder生成器,来解析Query查询器,从而适配不同的数据库。


    4:总结:数据库访问层是如何解决不同的连接和操作?

        Db里面是一种工厂模式设计思想,对外操作都是Db类,内部的话根据不同的配置文件选择驱动,这个驱动才是决定collection是什么类型的。不同的类来支持参与性的做法

        

时光疯子博客

    5:数据库中间层的好处

            1️⃣可以简化sql代码

            2️⃣不需要关心具体实现,只需要使用中间层给的统一Db类,就可以访问不同的数据库,做到跨数据库的一致性。


三:ThinkPHP 5 操作数据库3种方式

    1:原生sql

Db::query('select * from think_user where id=:id',['id'=>8]);
Db::execute('insert into think_user (id, name) values (:id, :name)',['id'=>8,'name'=>'thinkphp']);

    2:Query查询器

        简洁方便,查询构建器封装了不同数据库的统一的一个操作。

Db::table('think_user')->where('id',1)->find();
table where 是辅助方法 链式方法 访问的是一个query对象
select update delete insert find 真正操作方法  执行sql语句        
Db第一次query之后,如果后面加真正的操作方法,connect就会清除,如果没有加就不会清除,还代表那一次connect

    查询分为 :表达式、数组法、闭包

        1️⃣表达式:where('字段名', '表达式', '查询条件')

        2️⃣数组法

        3️⃣闭包

            $result = Db::table('test')

            ->where(function($query) use ($id){

            $query->where('id', '=', $id)

            })

            ->select();

3:ORM模式(对象关系映射)

    Object Relation Mapping  把一个表当成一个对象来理解


四:模型

    1:模型是什么?

        Db是数据库访问层,模型(model)是数据库访问层上面更加抽象的一个处理业务的层。

        模型可以分为三层:Model Service Logic


    2:模型和ORM关系

        ORM把一个表当成一个对象来理解

        模型有可能对应多个对象的,多个标的,根据功能来划分。 ThinkPHP 5模型不仅包含数据库的查询,还包含数据库其他的一些逻辑,模型更加关注的是业务逻辑。


        注意:

            1️⃣不要把模型理解成数据库的查询,模型更加关注的是业务逻辑而不是数据查询

            2️⃣不要把模型和数据库表一一对应,简单的业务逻辑会造成 一个假象,一个模型对应一个表,复杂的业务逻辑,模型会横跨多个表。


    3:模型的四个原则

        1️⃣模型和数据库访问层是两个不同的概念,职责不同,模型主要是用来处理业务的,数据库访问层主要用来查询数据库,模型是建立在Db的基础上

        2️⃣不要因为 模型性能稍差,就放弃模型,模型肯定比原生的sql性能差,好的代码第一原则是可读性

        3️⃣用面向对象的思维使用和设计模型

        4️⃣模型的底层是数据库访问层


    4:为什么推荐模型的查询使用静态方式调用

        1️⃣简洁

        2️⃣模型本身意义来说,数据库基本单位是表、是一条记录,类与对象的关系  类是生产对象的模板

        模型对象对应的是一条数据表的记录  


五:查看sql执行

    1:在链式方式加 fetchSql()  返回sql语句

        不会执行sql,这种方法有局限性,执行时间和状态就查看不到。


    2:可以把sql执行情况 写入到日志里

        app_debug=true  database.php debug=true

        在入口文件进行初始化全局日志记录,因为我们一开始关闭全局记录日志


白俊遥博客
请先登录后发表评论
  • 最新评论
  • 总共0条评论