一、引入pom

<dependency>
<groupId>me.lovegao</groupId>
<artifactId>gdao</artifactId>
<version>0.0.2-SNAPSHOT</version>
</dependency>

需要先将gdao项目(https://github.com/shuimutong/gdao.git)打包加到本地仓库。

0.0.2版本:tag:dev-1-init

0.0.3版本:tag:dev-2-tag-fix

二、连接配置

1、0.0.2版本

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

2、0.0.3配置

##驱动名称
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
#########v03##########
#归还连接时检测连接,true false
checkConnectionWhenReturn=true
#连接检测语句(检测必填)
checkConnectionValidationQuery=select 1
#定时检测连接间隔时长(分钟)
periodCheckConnectionTimeMin=10
#连接泄露检测
connectionLeakCheck=true
#连接泄露检测间隔时长(分钟),需大于0
connectionLeakCheckPeriodTimeMin=10
#强制归还连接时长(小时),0代表不检测
forceReturnConnectionTimeHour=6

3、0.0.3版本更新简介

0.0.3版本相当于上一个版本,主要是增加了连接检测。

连接检测包括3部分:归还连接时检测,连接定时检测,连接泄露检测。

1)检测必须配置的字段:checkConnectionValidationQuery=select 1

2)归还连接时检测

在归还连接时检测连接是否可用。

配置字段:checkConnectionWhenReturn=true

3)连接定时检测

定时检测连接池中的连接是否可用。如果不可用,就进行关闭处理,防止连接池中存放的连接是无用连接。

配置字段:periodCheckConnectionTimeMin=10,如果值为0,则不进行此项检测

4)连接泄露检测

防止连接被借出之后不归还,可能导致连接池数量很多,但是无可用连接。

配置字段:

forceReturnConnectionTimeHour=6,如果连接借出时长超过这个值,就会关闭连接,然后从连接池之后移除,如果为0,则代表不检测;

connectionLeakCheckPeriodTimeMin=10,检测是由线程进行检测的,这个字段表示线程每个多久检测一次

三、定义数据库对应的类和建表

1、UserDo

 package me.lovegao.gdao.dos;

 import me.lovegao.gdao.bean.annotation.GColumn;
import me.lovegao.gdao.bean.annotation.GId;
import me.lovegao.gdao.bean.annotation.GTable; @GTable("t_user")
public class UserDo {
@GId(isAutoIncrease=true)
@GColumn(name="id")
private long id; @GColumn(name="name")
private String name; @GColumn(name="age")
private int age; public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
} }

2、对应表sql

CREATE TABLE `t_user` (
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键',
`name` varchar(255) NOT NULL DEFAULT '' COMMENT '名称',
`age` int(15) NOT NULL DEFAULT 0 COMMENT '年龄',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 COMMENT='测试-用户表';

三、创建UserDao

package me.lovegao.gdao.dao;

import me.lovegao.gdao.dos.UserDo;
import me.lovegao.gdao.orm.BaseDao;
import me.lovegao.gdao.sqlexecute.ISqlExecutor; public class UserDao extends BaseDao<UserDo, Long> {
public UserDao(ISqlExecutor sqlExecutor) {
super(sqlExecutor);
} }

四、执行

public static void main(String[] args) throws Exception {
ISqlExecutor sqlExecutor = initDao();
addTest(sqlExecutor);
}
public static void addTest(ISqlExecutor sqlExecutor) throws Exception {
//实例化UserDao
UserDao userDao = new UserDao(sqlExecutor);
UserDo[] uds = listUser(); //获取测试数据
System.out.println("准备开始添加");
userDao.add(uds[0]); //添加数据
System.out.println("开始添加---");
long t1 = System.currentTimeMillis();
for(int i=1; i<uds.length; i++) {
userDao.add(uds[i]);
}
long t2 = System.currentTimeMillis();
double useTime = t2 - t1;
//5000条,totalUseTime:8629.0ms,avgUseTime:1.7261452290458092ms
System.out.println("totalUseTime:" + useTime + "ms,avgUseTime:" + useTime/(uds.length-1) + "ms");
}
//初始化资源管理,sql执行
public static ISqlExecutor initDao() throws Exception {
Properties prop = new Properties();
String confPath = "/mysql.properties";
prop.load(DaoTest.class.getResourceAsStream(confPath));
//0.0.2版本
DaoResourceManager daoResource = new DaoResourceManager(prop);
//0.0.3版本
DaoResourceManager daoResource = new DaoResourceManager(prop, true);
//获取sql执行器
ISqlExecutor sqlExecutor = daoResource.getSqlExecutor();
return sqlExecutor;
}

手写DAO框架(六)-框架使用示例的更多相关文章

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

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

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

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

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

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

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

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

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

    背景: 很久(4年)之前写了一个DAO框架-zxdata(https://github.com/shuimutong/zxdata),这是我写的第一个框架.因为没有使用文档,我现在如果要用的话,得从头 ...

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

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

  7. 纯手写SpringMVC到SpringBoot框架项目实战

    引言 Spring Boot其设计目的是用来简化新Spring应用的初始搭建以及开发过程.该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置. 通过这种方式,springboot ...

  8. 手写mini版MVC框架

    目录 1, Springmvc基本原理流程 2,注解开发 编写测试代码: 目录结构: 3,编写自定义DispatcherServlet中的初始化流程: 3.1 加载配置文件 3.2 扫描相关的类,扫描 ...

  9. 手写简易版RPC框架基于Socket

    什么是RPC框架? RPC就是远程调用过程,实现各个服务间的通信,像调用本地服务一样. RPC有什么优点? - 提高服务的拓展性,解耦.- 开发人员可以针对模块开发,互不影响.- 提升系统的可维护性及 ...

随机推荐

  1. Mybatis 面试题

    题目: 什么是Mybatis?  Mybatis27题 Mybaits的优点 Mybatis27题 MyBatis框架的缺点 Mybatis27题 MyBatis框架适用场合Mybatis27题 My ...

  2. 将lol人物模型导入到Unity3d

      接下来我打算将提取出来的lol人物模型导入到Unity3D中,这样会更加好玩!(不知道如何提取lol人物模型的话请看该链接)   首先我们已经把dae文件导入到c4d中了,可以看到这是一只吹笛子的 ...

  3. 分布式事务之最终一致性BASE理论

    一.事务 事务提供一种机制将一个活动涉及的所有操作纳入到一个不可分割的执行单元,组成事务的所有操作只有在所有操作均能正常执行的情况下方能提交,只要其中任一操作执行失败,都将导致整个事务的回滚.简单地说 ...

  4. typescript - 4.es5与typescript的类与继承

    ES5中的类与类的继承 (1)简单的类 function Person() { this.name = '张三'; this.age = 20; } var p = new Person(); ale ...

  5. egg.js 相关

      egg sequelize 建表规范 CREATE TABLE `wx_member` ( `id` ) NOT NULL AUTO_INCREMENT COMMENT 'primary key' ...

  6. time命令_Linux time命令:测量命令的执行时间或者系统资源的使用情况(转)

    原文地址:http://m.biancheng.net/linux/time.html 这里我们要学习的 time 命令是用来测量 Linux 程序执行时间的命令,而不是用来显示系统时间的命令.不是吧 ...

  7. 使用Delphi开发linux应用

    对于很多喜欢使用delphi做开发的人都希望delphi能够支持linux平台的开发,终于在delphi10.2版本中,delphi开始支持linux平台的开发了.在这里写一下Linux开发环境的配置 ...

  8. C++标准异常与自定义异常

    参见https://www.runoob.com/cplusplus/cpp-exceptions-handling.html C++ 标准的异常 C++ 提供了一系列标准的异常,定义在 中,我们可以 ...

  9. JAVA多态中的隐藏和覆盖

    Java的引用变量有两个类型,一个是编译时类型,一个是运行时类型 编译时类型:由声明该变量时使用的类型决定 运行时类型:由该变量指向的对象类型决定 如果编译时类型和运行时类型不一致,会出现所谓的多态. ...

  10. EditPlus配置ftp连接linux

    选择文件/FTP下面的设置FTP服务器 1.点击添加 2.填写名称.ftp服务器.用户名.密码信息 3.点击高级设置 4.选择加密方式为sftp,端口22,如果不填端口号,默认也是22,确定 5.确定 ...