SQL Builder 库 for Go

smartwalle · · 1902 次点击    
这是一个分享于 的资源,其中的信息可能已经有所发展或是发生改变。
## 项目地址 [https://github.com/smartwalle/dbs](https://github.com/smartwalle/dbs) ## DBA SQL Builder 工具, 不是 ORM。 ### 安装 ```shell $ go get github.com/smartwalle/dbs ``` ### 开始 ```go package main import ( "fmt" "github.com/smartwalle/dbs" ) func main() { var sb = dbs.NewSelectBuilder() sb.Selects("u.id", "u.name", "u.age") sb.From("user", "AS u") sb.Where("u.id = ?", 1) sb.Limit(1) sqlStr, args, _ := sb.ToSQL() fmt.Println("sqlStr:", sqlStr) fmt.Println("args:", args) } ``` 上述代码会输出如下内容: ```shell sql: SELECT u.id, u.name, u.age FROM `user` AS u WHERE u.id = ? LIMIT ? args: [10 1] ``` #### 执行 SQL 此处使用 MySQL 作为演示,需要准备好一个测试用数据库及 user 表,user 表结构如下: ```sql CREATE TABLE `user` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(32) DEFAULT NULL, `age` int(11) DEFAULT NULL, PRIMARY KEY (`id`), UNIQUE KEY `human_id_uindex` (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=0 DEFAULT CHARSET=utf8 ``` ```go package main import ( "database/sql" "fmt" _ "github.com/go-sql-driver/mysql" "github.com/smartwalle/dbs" ) func main() { var sb = dbs.NewSelectBuilder() sb.Selects("u.id", "u.name", "u.age") sb.From("user", "AS u") sb.Where("u.id = ?", 1) sb.Limit(1) db, err := sql.Open("mysql", "数据库连接信息") if err != nil { fmt.Println("连接数据库出错:", err) return } defer db.Close() var user *User if err := sb.Scan(db, &user); err != nil { fmt.Println("Query 出错:", err) return } if user != nil { fmt.Println(user.Id, user.Name, user.Age) } } type User struct { Id int64 `sql:"id"` Name string `sql:"name"` Age int `sql:"age"` } ``` 运行上述代码,如果数据库中存在 id 为 1 的数据,则会正常输出相关的信息。 #### Select ```go var sb = dbs.NewSelectBuilder() sb.Selects("u.id", "u.name AS username", "u.age") sb.Select(dbs.Alias("b.amount", "user_amount")) sb.From("user", "AS u") sb.LeftJoin("bank", "AS b ON b.user_id = u.id") sb.Where("u.id = ?", 1) fmt.Println(sb.ToSQL()) ``` 执行 Select 语句: ```go db, err := sql.Open("mysql", "数据库连接信息") var user *User sb.Scan(db, &user) ``` #### Insert ```go var ib = dbs.NewInsertBuilder() ib.Table("user") ib.Columns("name", "age") ib.Values("用户1", 18) ib.Values("用户2", 20) fmt.Println(ib.ToSQL()) ``` 执行 Insert 语句: ```go db, err := sql.Open("mysql", "数据库连接信息") ib.Exec(db) ``` #### Update ```go var ub = dbs.NewUpdateBuilder() ub.Table("user") ub.SET("name", "新的名字") ub.Where("id = ? ", 1) ub.Limit(1) fmt.Println(ub.ToSQL()) ``` 执行 Update 语句: ```go db, err := sql.Open("mysql", "数据库连接信息") ub.Exec(db) ``` #### Delete ```go var rb = dbs.NewDeleteBuilder() rb.Table("user") rb.Where("id = ?", 1) rb.Limit(1) fmt.Println(rb.ToSQL()) ``` 执行 Delete 语句: ```go db, err := sql.Open("mysql", "数据库连接信息") rb.Exec(db) ``` 更多内容请参考 test 文件。

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

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