一个简单的dao设计
最近把框架里的数据库连接池做好了,整个dao差不多也算完成了(因为懒,所以部分数据库驱动还没写!).
整个dao由连接对象和解析驱动两个部分组成,大概就是下面这个样子
连接对象主要实现如下方法:
- addServer 添加连接对象到连接池
- getServer 从连接池中取出一个对象
- query 发起只读(R)查询并返回PDO游标
- exec 发起增删改(CDU)操作,返回受影响的行数
解析器的作用是将操作状态转化为sql语句,主要实现以下功能:
- distinct 是否使用distinct去重
- table 设置表/别名
- sql 直接设置查询语句而不需要构造
- field 设置要查询的字段
- join 设置要join的目标
- union 设置union的目标
- where 设置查询条件和参数
- group 设置分组查询
- having 设置分组查询条件
- order 设置排序
- limit 设置要取出的偏移位置和取出数量
- fetchAll 取出所有数据
- fetch 取出一行数据
- fetchColumn 取出第一行第一个字段的数据
- insert 插入数据
- update 更新数据
- query 查询数据
- delete 删除数据
其中insert,update,query,delete由于数据库之间的差异,由各自的驱动来实现.
最后对dao封装一些常用方法:
- findAll 根据条件查询所有结果
- find 根据条件查询一条结果
- findColumn 根据条件取出指定字段的值
- insert 插入数据
- update 根据条件更新数据
- delete 根据条件删除数据
- count 根据条件获取满足的记录数
详情可参见MiniCore中的Vendor\Model\Dao, Vendor\Db\Connect, Vendor\Db\Dao\Driver
牛逼