gotool Mysql 操作工具以 gorm https://gorm.io/zh_CN/docs 为基础进行了基于连接池的封装,使用更加便利~
创建数据库配置文件,如 : configs\db.go,添加或修改如下配置 :
package configs
var DBConfig = map[string]map[string]string{
"DB": {
// 运行模式 [ dev : 开发模式会输出详细运行日志; 其他 : 只输出错误日志 ]
"RunMode": "Product",
// 数据库类型
"DBType": "MySQL",
// dev ( 开发环境 ) 对应的数据库地址
"HostDev":"localhost",
// 数据库主机地址
"Host": "localhost",
// 数据库端口号
"Port": "3306",
// 用户名
"Username": "root",
// 密码
"Password": "root",
// 连接被使用的最长时间,秒
"MaxLifetime": "180",
// 最大连接数
"MaxOpenConns": "1000",
// 最大空闲连接数
"MaxIdleConns": "50",
// 数据库名称
"DatabaseName": "test",
// 统一表前缀
"TablePrefix": "grace_",
// 字符集
"Charset": "utf8mb4",
},
}
数据库配置在 DBConfig map 中添加新的键值对即可 :
package configs
var DBConfig = map[string]map[string]string{
"DB": {
// 运行模式 [ dev : 开发模式会输出详细运行日志; 其他 : 只输出错误日志 ]
"RunMode": "Product",
// 数据库类型
"DBType": "MySQL",
// dev ( 开发环境 ) 对应的数据库地址
"HostDev":"localhost",
// 数据库主机地址
"Host": "localhost",
// 数据库端口号
"Port": "3306",
// 用户名
"Username": "root",
// 密码
"Password": "root",
// 连接被使用的最长时间,秒
"MaxLifetime": "180",
// 最大连接数
"MaxOpenConns": "1000",
// 最大空闲连接数
"MaxIdleConns": "50",
// 数据库名称
"DatabaseName": "test",
// 统一表前缀
"TablePrefix": "grace_",
// 字符集
"Charset": "utf8mb4",
},
"DB2": {
// 类似上面的配置格式
},
}
import (
"github.com/cnlesscode/gotool/db"
)
在 main.go 或者其他全局文件中执行 db.Start() 启动数据库连接池( 仅需一次 ),参数为数据库配置数据。
db.Start(configs.DBConfig)
功能 : 获取 gorm 操作对象 ( 单例模式 )
参数 : 数据库配置名称,可选参数, 默认 "DB"
说明 : 通过不同配置可以获取基于不同数据库的 orm 对象,实现多库操作
示例 :
package main
import (
"fmt"
"github.com/cnlesscode/gotool/db"
)
func main() {
db := db.Init()
fmt.Printf("db: %v\n", db)
}
获得 gorm 操作对象后您就可以进行任意形式的数据操作,关于 gorm 的知识请访问 gorm 官网 : https://gorm.io/zh_CN/docs
简单示例 :
package main
import (
"fmt"
"github.com/cnlesscode/gotool/db"
)
type Students struct {
Id int `gorm:"column:st_id;primaryKey"`
ClassId int `gorm:"column:st_class_id" binding:"gt=0"`
Name string `gorm:"column:st_name" binding:"min=2,max=20"`
Age int `gorm:"column:st_age" binding:"gt=5,lt=200"`
}
func main() {
db.Start(configs.DBConfig)
db := db.Init()
var sts []Students
err := db.Limit(10).Find(&sts).Error
if err == nil {
fmt.Printf("sts: %v\n", sts)
} else {
fmt.Printf("err: %v\n", err)
}
}
MapToWhere 函数可以将指定格式的 map 数据转换为 where 条件数据。
map[string][]any{
"字段名称": {"逻辑关系 空 and or", "比较运算符", 条件对应值},
//......
}
package main
import (
"fmt"
"github.com/cnlesscode/gotool/db"
)
type Students struct {
Id int `gorm:"column:st_id;primaryKey"`
ClassId int `gorm:"column:st_class_id" validate:"gt=0"`
Name string `gorm:"column:st_name" validate:"min=3"`
Age int `gorm:"column:st_age" validate:"gt=10"`
AddTime int `gorm:"column:st_add_time"`
}
func main() {
db.Start(configs.DBConfig)
dbObj := db.Init()
// where 条件组合演示
whereMap := map[string][]any{
"st_id": {"", ">", 265520},
"st_name": {"and", "like", "%张%"},
}
whereSql, whereVal := db.MapToWhere(whereMap)
fmt.Printf("whereSql: %v\n", whereSql)
fmt.Printf("whereVal: %v\n", whereVal)
// 查询演示
data := make([]Students, 0)
dbObj.Where(whereSql, whereVal...).Limit(10).Find(&data)
fmt.Printf("data: %v\n", data)
}