手写DAO框架(一)-从“1”开始
背景:
很久(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框架(一)-从“1”开始的更多相关文章
- 手写DAO框架(三)-数据库连接
-------前篇:手写DAO框架(二)-开发前的最后准备--------- 前言 上一篇主要是温习了一下基础知识,然后将整个项目按照模块进行了划分.因为是个人项目,一个人开发,本人采用了自底向上的开 ...
- 手写DAO框架(二)-开发前的最后准备
-------前篇:手写DAO框架(一)-从“1”开始 --------- 前言:前篇主要介绍了写此框架的动机,把主要功能点大致介绍了一下.此篇文章主要介绍开发前最后的一些准备.主要包括一些基础知识点 ...
- 手写DAO框架(四)-SQL执行
-------前篇:手写DAO框架(三)-数据库连接--------- 前言 通过上一篇写的方法,可以灵活的获取.释放数据库连接,拿到连接之后,我们就可以执行sql了!所以,本篇介绍的就是SQL执行器 ...
- 手写DAO框架(七)-如何保证连接可用
版权声明:本文为博客园博主「水木桶」的原创文章,遵循CC 4.0 by-sa版权协议,转载请附上原文出处链接及本声明.原文链接:https://www.cnblogs.com/shuimutong/p ...
- 手写DAO框架(五)-DAO层实现
-------前篇:手写DAO框架(四)-SQL执行--------- 前言 通过上一篇,可以通过传入sql和对应的参数,可以执行sql并返回结果.但是对于一个DAO框架来说,要尽量的面向对象编程,也 ...
- 手写DAO框架(六)-框架使用示例
一.引入pom <dependency> <groupId>me.lovegao</groupId> <artifactId>gdao</arti ...
- 手写MVC框架(一)-再出发
背景 前段时间把之前写的DAO框架(手写DAO框架(一)-从“1”开始)整理了一下,重构了一版.整理过程中看以前写的代码,只是为了了解实现,只是为了实现,代码写的有点粗糙.既然已经整理了DAO框架,索 ...
- 手写MQ框架(一)-准备启程
一.背景 很久以前写了DAO框架和MVC框架,前段时间又重写了DAO框架-GDAO(手写DAO框架(一)-从“1”开始,源码:https://github.com/shuimutong/gdao.gi ...
- 手写MQ框架(二)-服务端实现
一.起航 书接上文->手写MQ框架(一)-准备启程 本着从无到有,从有到优的原则,所以计划先通过web实现功能,然后再优化改写为socket的形式. 1.关于技术选型 web框架使用了之前写的g ...
随机推荐
- js 包管理工具
环境 Windows10 + node 12.x + Webstorm 2019.1.3 工具 npm cnpm yarn npm/cnpm Webstorm 中第一次安装包一定几率卡死,很烦 不使用 ...
- Python----DFS---骑士周游问题
这篇文章将会将一个数据结构与算法中一个很经典很重要的概念——深度优先搜索(Depth-First-Search:DFS).........(你他喵不是在标题里说了吗?) 好吧,DFS的精髓我其实也还没 ...
- Error: Registry key 'Software\JavaSoft\Java Runtime has value '1.8', but '1.7' is
cmd下输入 java命令时出现该错误: Error: Registry key 'Software\JavaSoft\Java Runtimehas value '1.8', but '1.7' i ...
- 如何反向遍历List集合
List接口中提供了ListIterator<E> listIterator()这样的一个方法,可以获得一个ListIterator接口的实例,如下: 看一下他的方法: 了解了这些之后再看 ...
- isinstance、issubclass、反射
一.isinstance.issubclass # isinstance(obj, cls) 检查obj是否是cls的对象 class A(object):pass a = A() print(isi ...
- 优化yum下载安装慢,不断换mirror
不停地换mirror,为了解决这个问题,在网上搜了好多资料,总结出一个基于aliyun的mirror源 先检查:是否能正常上网,DNS是否正常,网关gw是否正常,若通过ping 不正常,则解决好网络, ...
- python爬虫16 | 你,快去试试用多进程的方式重新去爬取豆瓣上的电影
我们在之前的文章谈到了高效爬虫 在 python 中 多线程下的 GIL 锁会让多线程显得有点鸡肋 特别是在 CPU 密集型的代码下 多线程被 GIL 锁搞得效率不高 特别是对于多核的 CPU 来说 ...
- BZOJ 1631 Usaco 2007 Feb. Cow Party
[题解] 最短路裸题.. 本题要求出每个点到终点走最短路来回的距离,因此我们先跑一遍最短路得出每个点到终点的最短距离,然后把边反向再跑一遍最短路,两次结果之和即是答案. #include<cst ...
- Redis学习总结(2)——Java使用Redis
安装 开始在 Java 中使用 Redis 前, 我们需要确保已经安装了 redis 服务及 Java redis 驱动,且你的机器上能正常使用 Java. Java的安装配置可以参考我们的 Java ...
- 集群管理软件clustershell
一.简介 1.安装方便.一条指令就能轻松安装. 2.配置方便.很多集群管理软件都需要在所有的服务器上都安装软件,而且还要进行很多的连接操作,clustershell就相当的方便了,仅仅需要所有机器能够 ...