gdbutil

package module
v0.1.1 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Nov 5, 2020 License: Apache-2.0 Imports: 0 Imported by: 0

README

gdbutil

gdbutil是一个给Golang开发者提供的数据库工具包。它可以帮助开发者快速构建数据库应用,免除很多冗余代码的编写,使用ORM风格的代码让数据库操作更加可读等。

golang api

使用gdbutil的api,建议直接使用go get命令将其导入到项目中:

$ go get github.com/fioncat/gdbutil/api

目前提供的api如下表所示:

api 描述 文档
sqlutil 基于"database/sql"的扩展
- orm功能
- sql拼接器
- 基于sql.NullType扩展的sqlutil.SetType,用于动态SQL场景
- 各种执行器和工具函数,减少重复代码
待定
cache 在数据库的基础上做两层缓存
- L1缓存为远程缓存,一般为redis
- L2缓存为本地lru缓存,一般只有热key数据才会存到L2缓存
- 当L1和L2都没有获取到才去数据库获取,并把数据加到缓存
- 提供修改和删除的功能,会同时触发缓存和数据库
- 提供分布式锁(可基于redis,etcd,zookeeper,也可以自定义实现)
防止分布式场景下的数据不一致问题
待定

使用的时候,直接导入代码即可,例如要使用sqlutil下的sql构造器来创建一个简单的sql插入语句:

package main

import (
    "fmt"

    "github.com/fioncat/gdbutil/api/sqlutil"
)

func main() {
    builder := sqlutil.NewBuilder("user")
    builder.SetFields([]string{"name", "age", "password", "email"})
    builder.SetPrepare(false)

    builder.AddBatch([]interface{}{"John", 12, "abc", "john@gmail.com"})
    builder.AddBatch([]interface{}{"Jim", 25, "efg", "jim@gmail.com"})

    sqlRes := builder.Insert()
    sql := sqlRes.Sql

    fmt.Println(sql)
}

程序输出:

INSERT INTO `user`(`name`,`age`,`password`,`email`) VALUES ('John','12','abc','john@gmail.com'),('Jim','25','efg','jim@gmail.com')

cmd toolkit

toolkit主要是一系列的命令行工具。请到 release page 下载。下载解压后,将bin下的二进制程序放到PATH下即可使用。或者,如果你的本机有Golang开发环境,也可以clone整个项目并自己进行build。关于build的说明请见下一章。

下面是gdbutil提供的关键命令行的基本特性

1. gdb gen: 用于自动生成Golang代码

  • 支持多种文件的生成,这里主要介绍sql代码的生成,其它见文档。
  • 可以直接根据数据库的表来生成表的orm结构体,并为结构体生成各种CURD代码,和基础的查询代码。对于非复杂查询情况,几乎所有的数据库操作都可以用orm实现。
  • 对于复杂的sql查询或执行语句,可以在sql文件中直接书写,在其中插入占位符${name}来表示查询的参数。每个sql语句会生成一个函数。直接根据数据库字段自动生成该sql语句的返回结构体,函数可以直接返回这个结构体。
  • 支持更多高级的功能:sql复用,定义通用的sql语句,在其它sql语句中通过占位符导入;在sql语句中加入iffor注释来根据参数动态拼凑sql语句;多表查询时,支持自动生成复杂结构体,例如一个结构体包含多个表的字段,或者一个结构体组合多个表的结构体,不论什么情况,gengdb都能生成这种结构体的rows.Scan的扫描代码等。
  • 一般的情况下,对于简单的,非复杂查询的sql语句,都可以直接使用orm风格的编码,gdbutil会使用反射自动生成sql语句(这里的反射场景很简单,不用担心效率问题);对于很复杂的sql,例如涉及到子查询,关联查询,动态条件查询等,可以直接编写sql语句,并生成对应的调用函数。这样的运作方式有点类似于Java的MyBatis+MyBatisPlus,但是更加轻量。
  • 了解更多,见sql文档,或例子。

2. gdb mock: 用于在数据库制造调试数据

  • 在很多场景下,在开发和测试的时候,可能需要制造大量的伪数据来模拟真实环境;或是在多系统的场景下,在数据入口尚未开发测试的时候,需要模拟数据来测试数据使用的场景。这时用到mockgdb可以非常方便地在数据库伪造数据。

  • mockgdb主要使用配置文件来定义伪造的表、字段、字段值。这种文件支持多种配置和规则。例如,要生成一个随机的邮箱地址,可以使用规则randstr(low+up+num,10)'@'dict(gmail,163,126,qq)'.com'。这个规则包含4个部分:

    • randstr(low+up+num,10): 生成10个长度的随机小写字母、大写字母、数字。例如"a1dCs14dsH"。
    • '@': 字符串常量
    • dict(gmail,163,126,qq): 每次从"gmail", "163","126","qq"这些字符串中挑选一个
    • '.com': 字符串常量

    这样就可以生成诸如"a1dCs14dsH@gmail.com"这样的邮箱格式的字符串了。mockgdb支持很多规则,详见文档。

  • mockgdb还支持很多高级用法:外部导入参数,定义变量,随机生成数据个数等。

  • 了解更多,见mockgdb文档,或例子。

Build

首先,将项目clone到本地:

$ git clone https://github.com/fioncat/gdbutil.git
$ cd gdbutil

本项目由Golang开发,请确保本机有go开发环境,作者的go环境是:

$ go version
go version go1.13.6 darwin/amd64

一般使用go 1.11以上的版本即可构建。构建的时候请开启go mod:

$ go env -w GO111MODULE=on

在linux或unix环境下,推荐直接使用Makefile进行构建:

$  GDBUTIL_OUT=/path/to/build make

你可以在/path/to/build下找到构建好的程序,如果不提供GDBUTIL_OUT,那么默认会输出到项目的out路径下。

如果你的系统不支持Makefile,可以直接用go命令进行构建:

$ go build -v -o gdb cmdt/*

这会直接在当前目录下生成构建好的程序gdb,它包含了gdbutil的所有命令行工具。

Documentation

Index

Constants

View Source
const VERSION = "0.1.1 beta"

Variables

This section is empty.

Functions

This section is empty.

Types

This section is empty.

Directories

Path Synopsis
api
sql
gen
misc
bio
cfg
db
samples
mysql_user/dbuser
Code generated by gdbutil_cache.
Code generated by gdbutil_cache.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL