手寫DAO框架(六)-框架使用示例

1、引入pom

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

須要先將gdao項目(https://github.com/shuimutong/gdao.git)打包加到本地倉庫。mysql

0.0.2版本:tag:dev-1-initgit

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

2、鏈接配置

一、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

二、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

三、0.0.3版本更新簡介 

0.0.3版本至關於上一個版本,主要是增長了鏈接檢測。sql

鏈接檢測包括3部分:歸還鏈接時檢測,鏈接定時檢測,鏈接泄露檢測。數據庫

1)檢測必須配置的字段:checkConnectionValidationQuery=select 1測試

2)歸還鏈接時檢測ui

在歸還鏈接時檢測鏈接是否可用。this

配置字段:checkConnectionWhenReturn=trueurl

3)鏈接定時檢測spa

定時檢測鏈接池中的鏈接是否可用。若是不可用,就進行關閉處理,防止鏈接池中存放的鏈接是無用鏈接。

配置字段:periodCheckConnectionTimeMin=10,若是值爲0,則不進行此項檢測

4)鏈接泄露檢測

防止鏈接被借出以後不歸還,可能致使鏈接池數量不少,可是無可用鏈接。

配置字段:

forceReturnConnectionTimeHour=6,若是鏈接借出時長超過這個值,就會關閉鏈接,而後從鏈接池以後移除,若是爲0,則表明不檢測;

connectionLeakCheckPeriodTimeMin=10,檢測是由線程進行檢測的,這個字段表示線程每一個多久檢測一次

3、定義數據庫對應的類和建表

一、UserDo

 1 package me.lovegao.gdao.dos;
 2 
 3 import me.lovegao.gdao.bean.annotation.GColumn;
 4 import me.lovegao.gdao.bean.annotation.GId;
 5 import me.lovegao.gdao.bean.annotation.GTable;
 6 
 7 @GTable("t_user")
 8 public class UserDo {
 9     @GId(isAutoIncrease=true)
10     @GColumn(name="id")
11     private long id;
12     
13     @GColumn(name="name")
14     private String name;
15     
16     @GColumn(name="age")
17     private int age;
18     
19     public long getId() {
20         return id;
21     }
22     public void setId(long id) {
23         this.id = id;
24     }
25     public String getName() {
26         return name;
27     }
28     public void setName(String name) {
29         this.name = name;
30     }
31     public int getAge() {
32         return age;
33     }
34     public void setAge(int age) {
35         this.age = age;
36     }
37     
38 }

二、對應表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='測試-用戶表';

3、建立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);
    }
    
}

4、執行

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;
}
相關文章
相關標籤/搜索