前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >golang :ORM之 QueryBuilder

golang :ORM之 QueryBuilder

原创
作者头像
IT工作者
发布2022-07-26 10:00:03
3590
发布2022-07-26 10:00:03
举报
文章被收录于专栏:程序技术知识

使用ORM的时候我们可以采用QueryBuilder 去构造SQL

qb的接口

代码语言:javascript
复制
// QueryBuilder is the Query builder interface
type QueryBuilder interface {
    Select(fields ...string) QueryBuilde
    ForUpdate() QueryBuilde
    From(tables ...string) QueryBuilde
    InnerJoin(table string) QueryBuilde
    LeftJoin(table string) QueryBuilde
    RightJoin(table string) QueryBuilde
    On(cond string) QueryBuilde
    Where(cond string) QueryBuilde
    And(cond string) QueryBuilde
    Or(cond string) QueryBuilde
    In(vals ...string) QueryBuilde
    OrderBy(fields ...string) QueryBuilde
    Asc() QueryBuilde
    Desc() QueryBuilde
    Limit(limit int) QueryBuilde
    Offset(offset int) QueryBuilde
    GroupBy(fields ...string) QueryBuilde
    Having(cond string) QueryBuilde
    Update(tables ...string) QueryBuilde
    Set(kv ...string) QueryBuilde
    Delete(tables ...string) QueryBuilde
    InsertInto(table string, fields ...string) QueryBuilde
    Values(vals ...string) QueryBuilde
    Subquery(sub string, alias string) string
    String() string
}

通过上面的接口我们可以看到 QueryBuilder 返回值也是一个QueryBuilder ,所以我们可以像平时写SQL构建自己的SQL解析语句

代码语言:javascript
复制
    orm.RegisterDataBase("default","mysql","root:123456@tcp(127.0.0.1:3306)/test?charset=utf8",30)
    orm.RegisterModel(new(UserInfo))
    o := orm.NewOrm()

上面代码 ,链接了数据库,创建了RegisterModel ,创建了Orm对象

接着创建QueryBuilde

代码语言:javascript
复制
qb, _ := orm.NewQueryBuilder("mysql")

目前支持以下四种数据库初始化

代码语言:javascript
复制
// NewQueryBuilder return the QueryBuilde
func NewQueryBuilder(driver string) (qb QueryBuilder, err error) {
    if driver == "mysql" {
        qb = new(MySQLQueryBuilder)
    } else if driver == "tidb" {
        qb = new(TiDBQueryBuilder)
    } else if driver == "postgres" {
        err = errors.New("postgres query builder is not supported yet")
    } else if driver == "sqlite" {
        err = errors.New("sqlite query builder is not supported yet")
    } else {
        err = errors.New("unknown driver for query builder")
    }
    return
}

构造sql语句

代码语言:javascript
复制
qb.Select("*").From("user_info")
sql := qb.String()

执行sql

代码语言:javascript
复制
o.Raw(sql).QueryRows(&user)

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档