一个简单的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中的VendorModelDao, VendorDbConnect, VendorDbDaoDriver

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏py+selenium

【Download error:TOO MANY REQUESTS】&【TypeError:excepted string or buffer】

    link_crawler('http://example.webscraping.com','/index')

1052
来自专栏技巅

Glusterfs之rpc模块源码分析(中)之Glusterfs的rpc模块实现(3)

1844
来自专栏Linux驱动

第1阶段——uboot分析之通过nand命令读内核(8)

本节主要学习: 详细分析UBOOT中"bootcmd=nand read.jffs2 0x30007FC0 kernel;bootm 0x30007FC0...

3279
来自专栏程序员互动联盟

【专业技术】揭秘安卓浏览器如何注入javascript脚本

Android中向webview注入js代码可以通过webview.loadUrl("javascript:xxx")来实现,然后就会执行javascript后...

4774
来自专栏晓晨的专栏

IdentityServer Topics(2)- 定义资源

1053
来自专栏along的开发之旅

程序集版本号,文件版本号及发布版本号管理

在.net框架中和CLR运行时钟引用,如使用程序集的强命名时就会使用. 按照我的理解,你所使用的库如log4net,常见的有2.0和4.0的,那么你下载的库...

1161
来自专栏Django Scrapy

Pychram下如何使用virtualenv

打开设置 ? Preferences 打开Project pythonProjects ---> Project interpreter 点击画圈的地方 齿轮按...

2889
来自专栏磨磨谈

从ceph对象中提取RBD中的指定文件

之前有个想法,是不是有办法找到rbd中的文件与对象的关系,想了很久但是一直觉得文件系统比较复杂,在fs 层的东西对ceph来说是透明的,并且对象大小是4M,而文...

952
来自专栏IMWeb前端团队

精通gulp常用插件

本文作者:IMWeb 林鑫 原文出处:IMWeb社区 未经同意,禁止转载 本文主要展示的是gulp常用插件的使用方法和用途,通过对插件的熟练运用达到...

2519
来自专栏蓝天

log4j日志文件路径设置

假设有如下标准化的目录结构: $HOME |-- log |-- conf |-- bin |-- lib |-- data jar包放在l...

993

扫码关注云+社区