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 传送门
goal/query-builder
qbhy0715@qq.com