是的没错,我就是抄的。一个像 Laravel 那样好用的 go语言的 SQL 查询构造器

qbhy · · 1024 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

# Goal/QueryBuilder Goal 的数据库查询构造器为创建和运行数据库查询提供了一个方便的接口。它可以用于支持大部分数据库操作,并与 Goal 支持的所有数据库系统完美运行。并且大量参考了 `Laravel` 的查询构造器设计,你几乎可以在这个库找到所有与 `Laravel` 对应的方法。 Goal 的查询构造器实现了类似 PDO 参数绑定的形式,来保护您的应用程序免受 SQL 注入攻击。因此不必清理因参数绑定而传入的字符串。查询构造器会返回你想要的 SQL 语句以及绑定参数。 ## 安装 ```bash go get github.com/goal-web/querybuilder ``` ## 运行数据库查询 ### 根据条件从表中检索出数据 你可以使用 `NewQuery` 方法来开始查询。该方法为给定的表返回一个查询构造器实例,允许你在查询上链式调用更多的约束,最后使用 get 方法获取结果: ```go package querybuilder import ( "fmt" ) func TestSimpleQueryBuilder() { query := NewQuery("users"). Where("name", "qbhy"). Where("age", ">", 18). Where("gender", "!=", 0). OrWhere("amount", ">=", 100). WhereIsNull("avatar") fmt.Println(query.ToSql()) fmt.Println(query.GetBindings()) // select * from users where name = ? and age > ? and gender != ? and avatar is null or amount >= ? // [qbhy 18 0 100] } ``` > 你也可以通过 `SelectSql` 方法一次性获取你想要的参数。 > 例如:sql, bindings := NewQuery("users").Where("gender", 1).SelectSql() ### 插入语句 你可以通过 `InsertSql` 或者 `CreateSql` 很方便的生成插入语句。 ```go package querybuilder import ( "fmt" "github.com/goal-web/contracts" ) // TestInsertSql 批量插入数据 func TestInsertSql() { sql, bindings := NewQuery("users").InsertSql([]contracts.Fields{ {"name": "qbhy", "age": 18, "money": 100000000000}, {"name": "goal", "age": 18, "money": 10}, }) fmt.Println(sql) fmt.Println(bindings) // insert into users (name,age,money) values (?,?,?),(?,?,?) // [qbhy 18 100000000000 goal 18 10] } // TestCreateSql 插入单个数据 func TestCreateSql() { sql, bindings := NewQuery("users").CreateSql(contracts.Fields{ "name": "qbhy", "age": 18, "money": 100000000000, }) fmt.Println(sql) fmt.Println(bindings) // insert into users (name,age,money) values (?,?,?) //[qbhy 18 100000000000] } ``` ### 更新语句 你可以通过 `UpdateSql` 很方便的生成更新语句。 ```go package querybuilder import ( "fmt" "github.com/goal-web/contracts" ) func TestUpdateSql() { sql, bindings := NewQuery("users").Where("id", ">", 1).UpdateSql(contracts.Fields{ "name": "qbhy", "age": 18, "money": 100000000000, }) fmt.Println(sql) fmt.Println(bindings) // update users set name = ?,age = ?,money = ? where id > ? // [qbhy 18 100000000000 1] } ``` ### 删除语句 你可以通过 `DeleteSql` 很方便的生成删除语句。 ```go package querybuilder import ( "fmt" ) func TestDeleteSql() { sql, bindings := NewQuery("users").Where("id", ">", 1).DeleteSql() fmt.Println(sql) fmt.Println(bindings) // delete from users where id > ? // [1] } ``` ## 更多高级用法 正如开头所说,你可以在这里找到几乎所有与 `Laravel` 对应的查询构造器方法,也可以在 [测试文件](https://github.com/goal-web/querybuilder/blob/master/database_test.go) 中找到更多用法 ## 彩蛋 ? 我正在开发一个像 laravel 那样的 Go web 开发框架,并且现在已经完成了大部分主要功能,如果你感兴趣的话,欢迎 star 持续跟踪最新动态 [goal传送门](https://github.com/goal-web) [goal/query-builder](https://github.com/goal-web/querybuilder) qbhy0715@qq.com

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

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

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