背景:

很久(4年)之前写了一个DAO框架-zxdata(https://github.com/shuimutong/zxdata),这是我写的第一个框架。因为没有使用文档,我现在如果要用的话,得从头看代码,不是太实用。zxdata没有使用连接池,所以练手意义大于使用意义。最近想重写一个DAO框架,希望能够方便的使用,在性能方面也有好的表现。

-----分割-------

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

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

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

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

以上这3点,是我自己想到的要求。如果不全,欢迎评论指出。

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

《配置》

一、连接参数

1、驱动类名

2、连接

3、用户名

4、密码

二、连接池参数

1、初始连接数

2、最大连接数

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

产生的疑问:

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

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

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

a、如果初始连接数小于最小连接数,那岂不是还要新建?

b、如果初始连接数大于最小连接数,那初始那么多干什么?

2、记得还见过最大空闲连接数。说现在基本不用了。

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

原话: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、对象层面

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

2、SQL层面

a、查询自定义SQL

b、执行自定义SQL

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

3、事务

事务的开启、关闭、回滚

二、基础层-连接池

1、功能点

初始化连接、获取连接、新连接创建

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

2、注意点

a、预缓存设置?

目前没搞懂是啥

b、连接有效性检测

连接是否可用

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

《功能点-介绍完毕》

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

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

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

手写DAO框架(一)-从“1”开始的更多相关文章

  1. 手写DAO框架(三)-数据库连接

    -------前篇:手写DAO框架(二)-开发前的最后准备--------- 前言 上一篇主要是温习了一下基础知识,然后将整个项目按照模块进行了划分.因为是个人项目,一个人开发,本人采用了自底向上的开 ...

  2. 手写DAO框架(二)-开发前的最后准备

    -------前篇:手写DAO框架(一)-从“1”开始 --------- 前言:前篇主要介绍了写此框架的动机,把主要功能点大致介绍了一下.此篇文章主要介绍开发前最后的一些准备.主要包括一些基础知识点 ...

  3. 手写DAO框架(四)-SQL执行

    -------前篇:手写DAO框架(三)-数据库连接--------- 前言 通过上一篇写的方法,可以灵活的获取.释放数据库连接,拿到连接之后,我们就可以执行sql了!所以,本篇介绍的就是SQL执行器 ...

  4. 手写DAO框架(七)-如何保证连接可用

    版权声明:本文为博客园博主「水木桶」的原创文章,遵循CC 4.0 by-sa版权协议,转载请附上原文出处链接及本声明.原文链接:https://www.cnblogs.com/shuimutong/p ...

  5. 手写DAO框架(五)-DAO层实现

    -------前篇:手写DAO框架(四)-SQL执行--------- 前言 通过上一篇,可以通过传入sql和对应的参数,可以执行sql并返回结果.但是对于一个DAO框架来说,要尽量的面向对象编程,也 ...

  6. 手写DAO框架(六)-框架使用示例

    一.引入pom <dependency> <groupId>me.lovegao</groupId> <artifactId>gdao</arti ...

  7. 手写MVC框架(一)-再出发

    背景 前段时间把之前写的DAO框架(手写DAO框架(一)-从“1”开始)整理了一下,重构了一版.整理过程中看以前写的代码,只是为了了解实现,只是为了实现,代码写的有点粗糙.既然已经整理了DAO框架,索 ...

  8. 手写MQ框架(一)-准备启程

    一.背景 很久以前写了DAO框架和MVC框架,前段时间又重写了DAO框架-GDAO(手写DAO框架(一)-从“1”开始,源码:https://github.com/shuimutong/gdao.gi ...

  9. 手写MQ框架(二)-服务端实现

    一.起航 书接上文->手写MQ框架(一)-准备启程 本着从无到有,从有到优的原则,所以计划先通过web实现功能,然后再优化改写为socket的形式. 1.关于技术选型 web框架使用了之前写的g ...

随机推荐

  1. python dns请求

    一.DNS dns(domain name system)域名系统 ,主要用来把主机名转换成ip地址.其至今能存在的原因有两个: 能使人们记住名字,而不是ip地址: 允许服务器改变地址,但使用相同的名 ...

  2. S3C2440中断

    韦东山老师一期中断课程学习: 总结: 程序启动后工作流程,程序从0地址开始执行Reset  --> 重定位  -->ldr pc,=main [绝对跳转到SDRAM中执行main()函数] ...

  3. 用 foreach()循环三维数组

    <?php $data = array( 0 => array( '中国' => 'china', '美国' => 'usa', '德国' => ' Germany', ...

  4. PAT_A1133#Splitting A Linked List

    Source: PAT A1133 Splitting A Linked List (25 分) Description: Given a singly linked list, you are su ...

  5. luogu P1775 古代人的难题_NOI导刊2010提高(02)(斐波纳契+数学)

    题意 已知x,y为整数,且满足以下两个条件: 1.x,y∈[1…k],且x,y,k∈Z 2.(x^2-xy-y^2)^2=1 给你一个整数k,求一组满足上述条件的x,y并且使得x^2+y^2的值最大. ...

  6. codevs——4189 字典&&HihoCoder #1014 : Trie树

    题目描述 Description 最经,skyzhong得到了一本好厉害的字典,这个字典里整整有n个单词(1<=n<=200000) 现在skyzhong需要在字典里查询以某一段字母开头的 ...

  7. 环状序列(Circular Sequence, ACM/ICPC Seoul 2004, UVa1584)

    长度为n的环状串有n种表示法,分别为从某 个位置开始顺时针得到.例如,图3-4的环状串 有10种表示: CGAGTCAGCT,GAGTCAGCTC,AGTCAGCTCG等. 在这些表示法中,字典序最小 ...

  8. SOUI界面库 添加 windows系统文件图标皮肤

    最近在学习soui界面库.其中有用到SListCtrl这个控件来现在文件信息.控件用法基本上和mfc 的CListCtrl差不多.也支持图标显示.但是图标是要自己加入图标图片的.这个就有点不好弄.于是 ...

  9. Shell 脚本编程 基本语法:

    Shell 脚本编程语法: 注: 文章来源 http://www.cnblogs.com/yunquan/p/6821850.html 视频来源:https://www.bilibili.com/vi ...

  10. 【Android】登陆界面设计

    界面布局 布局其实很简单,用相对布局累起来就可以了,然后注册和记住密码这两个控件放在一个水平线性布局里 界面底部还设置了一个QQ一键登录的入口,可以直接用. 控件的ID命名有点乱 <?xml v ...