# gomysql **Repository Path**: simon_git_code/gomysql ## Basic Information - **Project Name**: gomysql - **Description**: Mysql操作助手 - **Primary Language**: Go - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2022-12-30 - **Last Updated**: 2025-06-02 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # GoMySQL 数据库操作助手 **版本**:1.2.0 | **类型**:MySQL ORM 工具 | **作者**:Simon技术团队 ## 核心功能 1. **链式查询构建** - 支持流畅的API设计 2. **事务支持** - 提供完整的事务管理方案 3. **分页查询** - 内置智能化分页处理 4. **安全防护** - 自动参数化查询防止SQL注入 5. **连接池管理** - 支持连接复用和智能重连 6. **软删除支持** - 通过`isDel`字段实现数据保护 ## 主要结构体 ```go 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 ```