Mysql 操作工具

Mysql 操作工具

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"
)

db.Start() 全局启动数据库连接池

在 main.go 或者其他全局文件中执行 db.Start() 启动数据库连接池( 仅需一次 ),参数为数据库配置数据。

db.Start(configs.DBConfig)

db.Init() 获取 gorm 操作对象

功能 : 获取 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 的知识请访问 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() 函数

MapToWhere 函数可以将指定格式的 map 数据转换为 where 条件数据。

map 格式
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)
}