写一个“特殊”的查询构造器 - (1、程序结构,基础封装)mysql
写一个“特殊”的查询构造器 - (2、第一条语句)laravel
写一个“特殊”的查询构造器 - (4、条件查询:复杂条件)程序员
写一个“特殊”的查询构造器 - (5、聚合函数、分组、排序、分页)github
写一个“特殊”的查询构造器 - (7、DML 语句、事务)正则表达式
写一个“特殊”的查询构造器 - (8、单元测试、收尾工做)sql
此项目已经从 WorkerA 中拆分为独立项目,完整代码请到 wazsmwazsm/DB 中查看。数据库
对于后端程序员来讲,数据库操做是必备知识,对数据的增删查改也是业务中最广泛、频繁的操做。
对于关系型数据库,如 Mysql、Postgresql 等,咱们可使用 SQL (Structured Query Language) 来操做咱们的数据,如 “SELECT * FROM test;” 这类的 SQL 语句,大部分的编程语言如 PHP、Python、go 等都提供了相应的数据库扩展,能够方便的进行数据库链接、执行 SQL 获取结果。
可是,直接使用基础的扩展效率并不高,每次都要建立链接、手动写 SQL、对执行结果进行判断、将查询获得的数据进行处理等,代码的重用性和维护性并非很好,在多人开发的时候更是不能保证代码质量。而在项目开发中,咱们想要的是一个更好用的可维护的工具,此时,对代码的封装、模块化就显得尤其重要,因而出现了两种方案:查询构造器,对象关系映射。
写这个查询构造器的原由是 workerman,一个由 PHP 编写的、能够常驻内存的 Socket 框架。
当时选用 workerman 去作一个 webAPI 的项目,针对 workerman 的环境编写了一个简单的 http 框架 WorkerA,一是没有找到合适的 (在一个非典型 web 环境中,想要一个相似 laravel 那样方便的查询构造器),二是想要锻炼本身,因而选择了本身去写这个查询构造器。
现在该查询构造器已经完工,完整代码在个人框架核心代码中: 查看
Q:为何选择查询构造器而不是 ORM
A:对于我本身的需求,我须要一个简单好用又快速的工具,ORM 的性能和复杂性显然不合适。
Q:该查询构造器“特殊”在何处
A:区别于典型 web 的一次 HTTP 请求的代码运行周期,这个查询构造器除了可使用在普通的 web 环境中,还支持常驻内存的环境,支持断线重连 (这个很重要)
Q:为何选 PHP
A:由于我本身用 PHP 开发最多,重要的是 workerman 是 PHP 编写的。
Q:支持哪些数据库
A:目前支持了 Mysql、Postgresql、Sqlite 这三个数据库,并且所有经过了单元测试
Q:好的使用实践?
A:我在 workerman 的环境中使用的是单例模式,每一个进程一个数据库链接单例模型。典型 web 环境下按照通常的查询构造器处理就行。一样常驻内存的情景能够本身写连接池之类的功能,固然这和查询构造器自己没有关系,一切由你的需求来决定。
底层驱动的选择:
错误异常处理:
代码结构的设计:
SQL 的构建:
好用和性能的均衡考虑:
测试:
进行相关的需求分析和技术选择后,咱们得出了构建查询构造器的大概的思路:
理清思路,开始干活。
(本系列文章默认您已经掌握 PHP、PDO、SQL 的基础知识)