是的没错,我就是抄的。一个像 Laravel 那样好用的 go语言的 SQL 查询构造器
Goal/QueryBuilder
Goal 的数据库查询构造器为创建和运行数据库查询提供了一个方便的接口。它可以用于支持大部分数据库操作,并与 Goal 支持的所有数据库系统完美运行。并且大量参考了 Laravel
的查询构造器设计,你几乎可以在这个库找到所有与 Laravel
对应的方法。
Goal 的查询构造器实现了类似 PDO 参数绑定的形式,来保护您的应用程序免受 SQL 注入攻击。因此不必清理因参数绑定而传入的字符串。查询构造器会返回你想要的 SQL 语句以及绑定参数。
安装
go get github.com/goal-web/querybuilder
运行数据库查询
根据条件从表中检索出数据
你可以使用 NewQuery
方法来开始查询。该方法为给定的表返回一个查询构造器实例,允许你在查询上链式调用更多的约束,最后使用 get 方法获取结果:
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
很方便的生成插入语句。
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
很方便的生成更新语句。
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
很方便的生成删除语句。
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
对应的查询构造器方法,也可以在 测试文件
中找到更多用法
彩蛋 ?
我正在开发一个像 laravel 那样的 Go web 开发框架,并且现在已经完成了大部分主要功能,如果你感兴趣的话,欢迎 star 持续跟踪最新动态 goal传送门
「其他文章」
- Go语言爱好者周刊:第 144 期 — 一道切片的题目
- Wind分布式游戏服务器引擎的实现
- Go项目实战之日志必备篇[开源十年项目第11次更新]
- 深入Go底层原理,重写Redis中间件实战
- 从源码解读切片容量增加的计算步骤
- 什么是中间件
- 优维低代码:Storyboard 整体结构与路由配置
- 优维低代码:事件与交互
- 优维低代码:对接后台数据 !
- Go项目实战之无限级结构树形数据格式(易扩展方式)【goshop开源项目 | 20220430更新】
- 一种优雅的Golang的库插件注册加载机制
- 优维低代码:如何构建第一个微应用?
- Go项目实战之开发完善分页插件(易扩展方式)-------【goshop开源项目】【第12次更新】
- 优维低代码:关于Brick Next
- Go语言爱好者周刊:第 141 期
- 你知道什么是Go语言编程思维吗?【文末送 Go 新书】
- 一课玩转自动化运维全流程,轻松应对自动化运维岗
- 破解JavaScript高级玩法,成为精通 JS 的原生专家
- Android面试超级攻略,全面攻破技术疑难及面试痛点
- 2周刷完100道前端优质面试真题