乐趣区

关于golang:是的没错我就是抄的一个像-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 传送门

goal/query-builder
qbhy0715@qq.com

退出移动版