GoMySQL 数据库操作助手
版本:1.2.0 | 类型:MySQL ORM 工具 | 作者:Simon技术团队
核心功能
- 链式查询构建 - 支持流畅的API设计
- 事务支持 - 提供完整的事务管理方案
- 分页查询 - 内置智能化分页处理
- 安全防护 - 自动参数化查询防止SQL注入
- 连接池管理 - 支持连接复用和智能重连
- 软删除支持 - 通过
isDel字段实现数据保护
主要结构体
type ExQuery struct { // 查询构建器
//... 支持 Where/Order/Join/Limit 等方法
}
type PageResult { // 分页结果集
Data []map[string]interface{}
Total int // 总记录数
CurrentPage int // 当前页码
PageSize int // 每页数量
TotalPages int // 总页数
}
#### 特点
- 语意化操作
- 支持链式操作
- 支持连接池
- 查询结果自动转换为map
- 支持自定义查询
- 支持事务
- 高性能
- 支持闭包查询
### 项目结构
gomysql/
├── mysql/
│ └── db.go // 核心实现(连接池、查询构建器、ORM映射)
├── test.go // 测试示例
├── go.mod
├── LICENSE
├── Readme.md // 中文文档
└── README.en.md // 英文文档
安装
go get gitee.com/simon_git_code/gomysql
初始化
//数据库配置
dbconf := map[string]string{
"password": "123456",
"username": "root",
"network": "tcp",
"server": "127.0.0.1",
"port": "3306",
"database": "car",
"prefix": "c_",
}
// 获取查询实例
Db := new(mysql.Db)
Db.DbConn = new(mysql.DbConnection)
Db.DbConn.Connt(&dbconf)
// 连接池配置(可选配置)
// 设置与数据库建立连接的最大数目
Db.DbConn.DB.SetMaxOpenConns(500)
// 设置连接空闲的最大时间
Db.DbConn.DB.SetConnMaxIdleTime(16)
// 设置连接池中的最大闲置连接数
Db.DbConn.DB.SetMaxIdleConns(10)
// 设置连接可重用的最大时间
Db.DbConn.DB.SetConnMaxLifetime(30 * time.Second)
查询方法说明
基础查询
// 查询用户列表(带模糊搜索)
result, err := db.Db("users").
Field("id, username, email").
Where("status = ?", 1).
Like("username", "john").
Order("id DESC").
Paginate(1, 20)
func (*DbQuery) Field 指定查询字段
func (*DbQuery) Field(field string) *DbQuery
语句中指定被查询的字段,支持mysql查询函数
func (*DbQuery) Where 指定查询条件,支持多个Where
func (*DbQuery) Where(wher string,v interface{}) *DbQuery
用于Select、Delete、Update等查询条件,参数wher通常为预查询语句,例如:Where("id = ?",1),其含义为字段id的值为1的条件,?为占位符,必不可少。
Example
ret,err:=Db.Db("example").Field("*").Where("id = ?",1).Find()
解析为查询原语:
SELECT * FROM `example` WHERE `id`= 1
func (*DbQuery) Or
func (*DbQuery) Or(or string, v interface{})
OR条件查询
func (*DbQuery) In
func (*DbQuery) In(in string, v []interface{}) *DbQuery
IN查询,参数in 字段名,v 参数数组
Example
ret,err:=Db.Db("example").In("id",[]interface{}{1,2,3}).Field("*").Select()
解析为查询语原语:
SELECT * FROM `example` WHERE `id` IN (1,2,3)
func (q *DbQuery) OrIn
func (*DbQuery) OrIn(in string, v []interface{}) *DbQuery
OR IN查询 参数同in查询,只是在IN查询前加OR查询
func (q *DbQuery) Join 联合查询
func (*DbQuery) Join(jType string, table string, on string) *DbQuery
联合查询
jType //参数包含LEFT JOIN(left)、RIGHT JOIN(right)、INNER JOIN(inner)。
table //表名,在配置中如果指明了前辍,table不需要包含前辍
on //联合查询条件
Example
// 联表查询用户订单
db.Db("orders").
Alias("o").
Join("left", "users", "o.user_id = u.id").
Where("o.status > ?", 2).
Group("o.user_id").
Having("COUNT(*) > 5").
Select()
自定义查询
Db.Db("example").Query("select id from example")
事务
// 资金转账事务
tx, _ := db.Db("").CreateDBTx()
_, err1 := tx.Table("account").
TxUpdate(map[string]interface{}{"balance": gosql.Expr("balance - 100")}, "user_id = 123")
_, err2 := tx.Table("account").
TxUpdate(map[string]interface{}{"balance": gosql.Expr("balance + 100")}, "user_id = 456")
if err1 == nil && err2 == nil {
tx.TxCommit() // 提交事务
} else {
tx.TxRollback() // 回滚事务
}
其他方法
| 名称 |
参数 |
说明 |
| Order |
order 字符串 |
ORDER BY语句 |
| Group |
group 字符串 |
GROUP BY语句 |
| Size |
page int 默认值1, size int 页容量 |
分页查询 |
| Having |
having 字符串 含占位符? |
HAVING条件语句 |
| Find |
无 |
查询一条记录 |
| Select |
无 |
查询多条记录 |
| Save |
map[string]interface{} |
写入数据 |
| Update |
无 |
更新数据 |
| Del |
无 |
删除记录 |
| Query |
字符串 |
自定义查询 |
| Fun |
*ExQuery |
闭包查询 |
获取写入成功后的自增ID
Save方法写入成功后,返回sql.Result实例。
newId,err:=result.LastInsertId()
newId即为新增的ID