是的没错,我就是抄的。一个像 Laravel 那样好用的 go语言的 SQL 查询构造器
source link: https://studygolang.com/articles/35413
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
是的没错,我就是抄的。一个像 Laravel 那样好用的 go语言的 SQL 查询构造器
qbhy · 9天之前 · 341 次点击 · 预计阅读时间 3 分钟 · 大约8小时之前 开始浏览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大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:701969077
Recommend
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK