Gopher苦ORM久矣,发布个高效极简的rawsql库

lesismal · · 3392 次点击 · 开始浏览    置顶
这是一个创建于 的主题,其中的信息可能已经有所发展或是发生改变。

# sqlw - ra***w*** and simple ***w***rapped std sql [![Doc][1]][2] [![Go Report Card][3]][4] [![MIT licensed][5]][6] [1]: https://godoc.org/github.com/lesismal/sqlw?status.svg [2]: https://godoc.org/github.com/lesismal/sqlw [3]: https://goreportcard.com/badge/github.com/lesismal/sqlw [4]: https://goreportcard.com/report/github.com/lesismal/sqlw [5]: https://img.shields.io/badge/license-MIT-blue.svg [6]: LICENSE ## 安装 ```sh go get github.com/lesismal/sqlw ``` ## 使用 ### 定义结构 **Noted**: 1. 这里示例的结构体标签`db`,用于映射结构体与sql的表字段。 2. 如果您想使用一些三方工具自动生成结构体或sql表,但是三方工具有自定义的结构体标签,您可以在 `sqlw.Open` 时指定结构体标签,或者用 `db.SetTag()` 方法来修改该标签。 ```golang type Model struct { Id int64 `db:"id"` I int64 `db:"i"` S string `db:"s"` } ``` ### 创建sqlw.DB实例 ```golang import ( _ "github.com/go-sql-driver/mysql" "github.com/lesismal/sqlw" ) // "db" 是您的结构体用于与sql表字段映射的标签, 如果您使用三方工具自动生成结构体或sql表,您可以根据该工具生成的实际标签作为参数 db, err := sqlw.Open("mysql", SqlConnStr, "db") if err != nil { // handle err } ``` ### 创建/使用事务 ```golang tx, err := db.Begin() if err != nil { // handle err } defer tx.Rollback() // curd logic err = tx.Commit() if err != nil { // handle err } ``` ### 创建/使用Stmt/预编译 ```golang stmt, err := db.Prepare(`your sql`) if err != nil { // handle err } // curd logic using stmt ``` ### 插入一条记录 ```golang model := Model{ I: 1, S: "str_1", } result, err := db.Insert("insert into sqlw_test.sqlw_test", &model) // result, err := db.Insert("insert into sqlw_test.sqlw_test(i,s)", &model) // 插入结构体指定字段 if err != nil { log.Panic(err) } log.Println("sql:", result.Sql()) ``` ### 插入多条记录 ```golang var models []*Model for i:=0; i<3; i++{ models = append(models, &Model{ I: i, S: fmt.Sprintf("str_%v", i), }) } result, err := db.Insert("insert into sqlw_test.sqlw_test", models) // result, err := db.Insert("insert into sqlw_test.sqlw_test(i,s)", models) // 插入结构体指定字段 if err != nil { log.Panic(err) } log.Println("sql:", result.Sql()) ``` ### 删除记录 ```golang deleteId := 1 result, err := db.Delete("delete from sqlw_test.sqlw_test where id=?", deleteId) if err != nil { log.Panic(err) } log.Println("sql:", result.Sql()) ``` ### 更新记录 ```golang m := Model{ I: 10, S: "str_10", } updateId := 1 result, err := db.Update("update sqlw_test.sqlw_test set i=?, s=? where id=?", &m, updateId) if err != nil { log.Panic(err) } log.Println("sql:", result.Sql()) ``` ### 查询单条记录 ```golang var model Model selectId := 1 result, err := db.Select(&model, "select * from sqlw_test.sqlw_test where id=?", selectId) // result, err := db.Select(&model, "select (i,s) from sqlw_test.sqlw_test where id=?", selectId) // 查询结构体指定字段 if err != nil { log.Panic(err) } log.Println("model:", model) log.Println("sql:", result.Sql()) ``` ### 查询多条记录 ```golang var models []*Model // type []Model is also fine result, err = db.Select(&models, "select * from sqlw_test.sqlw_test") // result, err = db.Select(&models, "select (i,s) from sqlw_test.sqlw_test") // 查询结构体指定字段 if err != nil { log.Panic(err) } for i, v := range models { log.Printf("models[%v]: %v", i, v) } log.Println("sql:", result.Sql()) ``` ### 获取执行的sql语句及参数 > `sqlw.DB/Tx/Stmt` 的所有 `Query/QueryRow/Exec/Insert/Delete/Update/Select` 相关方法都会返回 `(sqlw.Result, error)`, > 其中的 `sqlw.Result` 是非 nil 的,您可以通过 `sqlw.Result.Sql()` 获取实际执行的sql语句及参数并辅助日志或调试。 例如: ```golang result, err := db.Insert(`insert into t(a,b) values(?,?)`, 1, 2) if err != nil { // handle err } fmt.Println("sql:", result.Sql) ``` 输出: ```sh sql: insert into t(a,b) values(?,?), [1, 2] ``` ### 更多示例 请参考:[sqlw_examples](https://github.com/lesismal/sqlw_examples)

有疑问加站长微信联系(非本文作者)

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

3392 次点击  
加入收藏 微博
2 回复  |  直到 2022-07-01 09:09:06
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传