是的没错,我就是抄的。一个像|是的没错,我就是抄的。一个像 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 querybuilderimport (
"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 querybuilderimport (
"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 querybuilderimport (
"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传送门
【是的没错,我就是抄的。一个像|是的没错,我就是抄的。一个像 Laravel 那样好用的 go 语言的 SQL 查询构造器】goal/query-builder
qbhy0715@qq.com
推荐阅读
- 我要做大厨
- 一个小故事,我的思考。
- 家乡的那条小河
- 第三节|第三节 快乐和幸福(12)
- 这辈子我们都不要再联系了
- 死结。
- 跌跌撞撞奔向你|跌跌撞撞奔向你 第四章(你补英语,我补物理)
- 我从来不做坏事
- 喂,你结婚我给你随了个红包
- 祖母走了