使用ORM的时候我们可以采用QueryBuilder 去构造SQL
qb的接口
// 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解析语句
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
qb, _ := orm.NewQueryBuilder("mysql")
目前支持以下四种数据库初始化
// 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语句
qb.Select("*").From("user_info")
sql := qb.String()
执行sql
o.Raw(sql).QueryRows(&user)
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。