• 手写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框架(二)-开发前的最后准备

  • 相关阅读:
    iOS
    iOS
    ios
    iOS
    ios
    ios
    iOS
    ios
    常用NSString的方法
    instancetype
  • 原文地址:https://www.cnblogs.com/shuimutong/p/10962182.html
Copyright © 2020-2023  润新知