Golang SQLBuilder:轻量级SQL查询字符串构建工具

Golang SQLBuilder:轻量级SQL查询字符串构建工具 https://github.com/eehsiao/sqlbuilder

sqlbuilder

sqlbuilder 是一个简单的 SQL 查询字符串构建器

sqlbuilder 采用递归调用函数的方式,让您可以轻松构建 SQL 字符串

例如:dao.Select().From().Join().Where().Limit()

SqlBuilder 函数

  • 构建 select:

    • Select(s …string)
    • Distinct(b bool)
    • Top(i int)
    • From(s …string)
    • Where(s string)
    • WhereAnd(s …string)
    • WhereOr(s …string)
    • Join(s string, c string)
    • InnerJoin(s string, c string)
    • LeftJoin(s string, c string)
    • RightJoin(s string, c string)
    • FullJoin(s string, c string)
    • GroupBy(s …string)
    • OrderBy(s …string)
    • OrderByAsc(s …string)
    • OrderByDesc(s …string)
    • Having(s string)
    • BuildSelectSQL()
  • 构建 update:

    • Set(s map[string]interface{})
    • FromOne(s string)
    • BuildUpdateSQL()
  • 构建 insert:

    • Into(s string)
    • Fields(s …string)
    • Values(s …[]interface{})
    • BuildInsertSQL()
  • 构建 delete:

    • BuildDeleteSQL()
  • 通用功能:

    • ClearBuilder()
    • BuildedSQL()
    • SetDbName(s string)
    • SetTbName(s string)
    • SwitchPanicToErrorLog(b bool)
    • PanicOrErrorLog(s string)

更多关于Golang SQLBuilder:轻量级SQL查询字符串构建工具的实战教程也可以访问 https://www.itying.com/category-94-b0.html

1 回复

更多关于Golang SQLBuilder:轻量级SQL查询字符串构建工具的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


这是一个非常实用的 Go 语言 SQL 查询构建器库。让我通过几个示例代码来展示如何使用这个库的主要功能:

基本 SELECT 查询

import "github.com/eehsiao/sqlbuilder"

// 简单查询
builder := sqlbuilder.NewBuilder()
sql, err := builder.Select("id", "name", "email").
    From("users").
    Where("age > ?").
    OrderByDesc("created_at").
    Limit(10).
    BuildSelectSQL()

// 输出: SELECT id, name, email FROM users WHERE age > ? ORDER BY created_at DESC LIMIT 10

复杂 JOIN 查询

builder := sqlbuilder.NewBuilder()
sql, err := builder.Select("u.id", "u.name", "p.title").
    From("users u").
    InnerJoin("posts p", "u.id = p.user_id").
    WhereAnd("u.status = ?", "p.published = ?").
    GroupBy("u.id").
    Having("COUNT(p.id) > ?").
    BuildSelectSQL()

// 输出: SELECT u.id, u.name, p.title FROM users u INNER JOIN posts p ON u.id = p.user_id 
// WHERE (u.status = ?) AND (p.published = ?) GROUP BY u.id HAVING COUNT(p.id) > ?

INSERT 操作

builder := sqlbuilder.NewBuilder()
sql, err := builder.Into("users").
    Fields("name", "email", "age").
    Values([]interface{}{"John", "john@example.com", 30}).
    BuildInsertSQL()

// 输出: INSERT INTO users (name, email, age) VALUES (?, ?, ?)

UPDATE 操作

builder := sqlbuilder.NewBuilder()
sql, err := builder.FromOne("users").
    Set(map[string]interface{}{
        "name": "Jane",
        "age":  25,
    }).
    Where("id = ?").
    BuildUpdateSQL()

// 输出: UPDATE users SET name = ?, age = ? WHERE id = ?

DELETE 操作

builder := sqlbuilder.NewBuilder()
sql, err := builder.FromOne("users").
    Where("id = ?").
    BuildDeleteSQL()

// 输出: DELETE FROM users WHERE id = ?

使用 DISTINCT 和 TOP

builder := sqlbuilder.NewBuilder()
sql, err := builder.Select("name").
    Distinct(true).
    Top(5).
    From("users").
    BuildSelectSQL()

// 输出: SELECT DISTINCT TOP 5 name FROM users

条件构建

builder := sqlbuilder.NewBuilder()
sql, err := builder.Select("*").
    From("products").
    WhereOr("category = ?", "price > ?").
    OrderByAsc("name").
    BuildSelectSQL()

// 输出: SELECT * FROM products WHERE (category = ?) OR (price > ?) ORDER BY name ASC

这个库的递归调用设计确实让 SQL 构建变得非常直观和流畅。每个方法都返回 builder 实例,支持链式调用,代码可读性很好。对于需要动态构建 SQL 查询的 Go 应用程序来说,这是一个很好的工具选择。

回到顶部