项目地址:https://gitee.com/zht639/my_gopkg
autosql
autosql
是一个简化数据库使用的模块,支持常见的数据库(MySQL、PostgreSQL、SQLite、SQL Server)。该模块不仅提供了数据库连接函数,还能自动生成数据表对应的结构体,极大简化了数据库的初始化操作。
一、使用方法
打开项目根目录,在该目录下打开命令行,然后按如下步骤操作。
(1)初始化本地mod(有则跳过此步)
go mod init 你的模块名
(2)下载到本地(若之前就下载过,请忽略此步,转至第四步)
go get gitee.com/zht639/my_gopkg
(3)在go文件中导包即可
import "gitee.com/zht639/my_gopkg/autosql"
(4)若之前就下载过我的包,则需要打开mod,删除require语句,再执行如下指令
go mod tidy
二、功能概述
-
连接函数:
-
ConnMysql(username, password, host, port, dbname string)
: 连接 MySQL 数据库。 -
ConnPostgres(username, password, host, port, dbname string)
: 连接 PostgreSQL 数据库。 -
ConnSQLite(filepath string)
: 连接 SQLite 数据库。 -
ConnSQLServer(username, password, host, port, dbname string)
: 连接 SQL Server 数据库。
-
-
结构体生成:
-
GenStruct(db *gorm.DB, tableName string)
: 生成数据库中指定表的结构体。 -
GenAllStructs(db *gorm.DB)
: 生成数据库中所有表的结构体。
使用生成结构体功能可以将数据库中的表映射为 Go 语言的结构体,极大地提高了开发效率和代码的可维护性。
-
三、使用示例
以mysql为例,连接数据库并生成表的结构体:
package main
import (
"fmt"
"gitee.com/zht639/my_gopkg/autosql"
)
func main() {
db, err := autosql.ConnMysql("root", "123456", "localhost", "3306", "db01")
if err != nil {
fmt.Println(err)
return
}
// 自动生成所有表对应的结构体
autosql.GenAllStructs(db)
//或者生成指定表对应的结构体
//autosql.GenStruct(db, "student")
}
该函数将会在当前目录下(main.go所在目录)生成一个model包,该文件包含了数据库中所有表的结构体,
目录结构如下:
├─model
│ grade.gen.go
│ student.gen.go
│ user.gen.go
打开其中一个文件,它不仅包含了结构体定义,还包含了json绑定字符串和返回表名的方法:
// Code generated by gorm.io/gen. DO NOT EDIT.
// Code generated by gorm.io/gen. DO NOT EDIT.
// Code generated by gorm.io/gen. DO NOT EDIT.
package model
import (
"time"
)
const TableNameStudent = "student"
// Student mapped from table <student>
type Student struct {
Stuid int32 `gorm:"column:stuid;primaryKey;autoIncrement:true" json:"stuid"`
Stuno string `gorm:"column:stuno" json:"stuno"`
Name string `gorm:"column:name" json:"name"`
Sex string `gorm:"column:sex" json:"sex"`
Age int32 `gorm:"column:age" json:"age"`
Birth time.Time `gorm:"column:birth" json:"birth"`
}
// TableName Student's table name
func (*Student) TableName() string {
return TableNameStudent
}
之后若数据库中的表结构发生变化,只需用GenStruct()
或GenAllStructs()
重新生成结构体即可。
注:该包基于GORM相关的包,但本人的包已包含相关依赖,直接下载本人的包即可使用GORM,CRUD操作也推荐使用GORM的提供的函数。