手写DAO框架(一)-从“1”开始

背景:html

好久(4年)以前写了一个DAO框架-zxdata(https://github.com/shuimutong/zxdata),这是我写的第一个框架。由于没有使用文档,我如今若是要用的话,得从头看代码,不是太实用。zxdata没有使用链接池,因此练手意义大于使用意义。最近想重写一个DAO框架,但愿可以方便的使用,在性能方面也有好的表现。java

-----分割-------mysql

工做了这么多年,重写DAO框架,发现框架不太容易写:git

首先,使用得简单。不能让使用者仅仅使用一个框架,得先把框架代码看一遍才知道怎么用。github

其次,该封装的得封装起来。代码一发布,具体怎么使用?使用哪些?是用户本身决定的。为了框架的可持续迭代,不能之后升级个实现,致使不兼容之前的代码。sql

最后,在封装的前提下,得尽可能给用户提供足够的使用自由。框架包含链接池和ORM映射两个功能,我以为链接池功能挺好用的,我只想用链接池功能,你框架得能让我单独使用。缓存

以上这3点,是我本身想到的要求。若是不全,欢迎评论指出。框架

 

万丈高楼平地起,我是从配置开始设计的。函数

《配置》post

1、链接参数

    一、驱动类名

    二、链接

    三、用户名

    四、密码

2、链接池参数

    一、初始链接数

    二、最大链接数

    三、最大等待时间(0-无限等待)

产生的疑问:

https://www.cnblogs.com/JavaSubin/p/5294721.html

一、看网上介绍,链接数有最小链接数和初始链接数。

这两个分开配置有什么说法吗?

a、若是初始链接数小于最小链接数,那岂不是还要新建?

b、若是初始链接数大于最小链接数,那初始那么多干什么?

二、记得还见过最大空闲链接数。说如今基本不用了。

看了一下,原来链接原本是有有效时间的。这样就不用考虑主动销毁链接了,在检测时无效直接移除就好了。

原话:maxIdle的属性,表示最大空闲链接数,超过的空闲链接将被释放,默认值为8。对应的该属性在Druid链接池已再也不使用,配置了也没有效果

参考配置:

##驱动名称
driverName=com.mysql.jdbc.Driver
##链接url
connectionUrl=jdbc:mysql://localhost:3306/simple?useServerPrepStmts=false&rewriteBatchedStatements=true&connectTimeout=1000&useUnicode=true&characterEncoding=utf-8
##用户名
userName=simple
##用户密码
userPassword=123456
##初始化链接数
initConnectionNum=10
##最大链接数
maxConnectionNum=50
##最大查询等待时间
maxQueryTime=3

《配置-介绍完毕》

配置就是以上这些。配置列好以后,开始整理功能点

 

《功能点》

我把功能点按照使用层级来分的。

1、最上层

  一、对象层面

    对象的新增、更新、查询、删除。

  二、SQL层面

    a、查询自定义SQL

    b、执行自定义SQL

    c、call方法:执行存储过程、函数

  三、事务

    事务的开启、关闭、回滚

2、基础层-链接池

  一、功能点

    初始化链接、获取链接、新链接建立

    开始想的是,获取链接的时候若是没有链接了就等待一会再试,后来参考别的框架发现没有必要,链接没有了直接返回链接耗尽完事。简单、干脆。

  二、注意点

    a、预缓存设置?

      目前没搞懂是啥

    b、链接有效性检测

      链接是否可用

      超时链接关闭设置:关闭存活时间较长的链接,防止链接泄露

《功能点-介绍完毕》

整理的功能点就是以上这些,我是用脑图整理的,总体结构以下:

 

--欲知接下来如何,请看下回讲解--

 

下篇:手写DAO框架(二)-开发前的最后准备

相关文章
相关标签/搜索