From 8313b6ace7e192118cc65a54e90eb3b77d24eef8 Mon Sep 17 00:00:00 2001 From: vCaesar Date: Sat, 10 Jun 2017 11:53:56 +0800 Subject: [PATCH] Format and remove 05.5.md spaces --- zh/05.5.md | 244 ++++++++++++++++++++++++++--------------------------- 1 file changed, 122 insertions(+), 122 deletions(-) diff --git a/zh/05.5.md b/zh/05.5.md index 6db69c67..0cecacf8 100644 --- a/zh/05.5.md +++ b/zh/05.5.md @@ -34,21 +34,21 @@ beego orm支持go get方式安装,是完全按照Go Style的方式来实现的 首先你需要import相应的数据库驱动包、database/sql标准接口包以及beego orm包,如下所示: ```Go - import ( - "database/sql" - "github.com/astaxie/beego/orm" - _ "github.com/go-sql-driver/mysql" - ) +import ( + "database/sql" + "github.com/astaxie/beego/orm" + _ "github.com/go-sql-driver/mysql" +) - func init() { - // 设置默认数据库 - orm.RegisterDataBase("default", "mysql", "root:root@/my_db?charset=utf8", 30) - //注册定义的model +func init() { + // 设置默认数据库 + orm.RegisterDataBase("default", "mysql", "root:root@/my_db?charset=utf8", 30) + //注册定义的model orm.RegisterModel(new(User)) // 创建table orm.RunSyncdb("default", false, true) - } +} ``` PostgreSQL 配置: @@ -96,9 +96,9 @@ beego orm: ```Go - func main() { +func main() { orm := orm.NewOrm() - } +} ``` 简单示例: @@ -124,8 +124,8 @@ func init() { // 注册定义的 model orm.RegisterModel(new(User)) - //RegisterModel 也可以同时注册多个 model - //orm.RegisterModel(new(User), new(Profile), new(Post)) +//RegisterModel 也可以同时注册多个 model +//orm.RegisterModel(new(User), new(Profile), new(Post)) // 创建 table orm.RunSyncdb("default", false, true) @@ -175,49 +175,49 @@ orm.SetMaxOpenConns("default", 30) 目前beego orm支持打印调试,你可以通过如下的代码实现调试 ```Go - orm.Debug = true + orm.Debug = true ``` 接下来我们的例子采用前面的数据库表User,现在我们建立相应的struct ```Go - type Userinfo struct { - Uid int `PK` //如果表的主键不是id,那么需要加上pk注释,显式的说这个字段是主键 - Username string - Departname string - Created time.Time - } +type Userinfo struct { + Uid int `PK` //如果表的主键不是id,那么需要加上pk注释,显式的说这个字段是主键 + Username string + Departname string + Created time.Time +} - type User struct { - Uid int `PK` //如果表的主键不是id,那么需要加上pk注释,显式的说这个字段是主键 - Name string - Profile *Profile `orm:"rel(one)"` // OneToOne relation - Post []*Post `orm:"reverse(many)"` // 设置一对多的反向关系 - } +type User struct { + Uid int `PK` //如果表的主键不是id,那么需要加上pk注释,显式的说这个字段是主键 + Name string + Profile *Profile `orm:"rel(one)"` // OneToOne relation + Post []*Post `orm:"reverse(many)"` // 设置一对多的反向关系 +} - type Profile struct { - Id int - Age int16 - User *User `orm:"reverse(one)"` // 设置一对一反向关系(可选) - } +type Profile struct { + Id int + Age int16 + User *User `orm:"reverse(one)"` // 设置一对一反向关系(可选) +} - type Post struct { - Id int - Title string - User *User `orm:"rel(fk)"` //设置一对多关系 - Tags []*Tag `orm:"rel(m2m)"` - } +type Post struct { + Id int + Title string + User *User `orm:"rel(fk)"` //设置一对多关系 + Tags []*Tag `orm:"rel(m2m)"` +} - type Tag struct { - Id int - Name string - Posts []*Post `orm:"reverse(many)"` - } +type Tag struct { + Id int + Name string + Posts []*Post `orm:"reverse(many)"` +} - func init() { - // 需要在init中注册定义的model - orm.RegisterModel(new(Userinfo),new(User), new(Profile), new(Tag)) - } +func init() { + // 需要在init中注册定义的model + orm.RegisterModel(new(Userinfo),new(User), new(Profile), new(Tag)) +} ``` @@ -227,15 +227,15 @@ orm.SetMaxOpenConns("default", 30) 下面的代码演示了如何插入一条记录,可以看到我们操作的是struct对象,而不是原生的sql语句,最后通过调用Insert接口将数据保存到数据库。 ```Go - o := orm.NewOrm() - var user User - user.Name = "zxxx" - user.Departname = "zxxx" +o := orm.NewOrm() +var user User +user.Name = "zxxx" +user.Departname = "zxxx" - id, err := o.Insert(&user) - if err == nil { - fmt.Println(id) - } +id, err := o.Insert(&user) +if err == nil { + fmt.Println(id) +} ``` 我们看到插入之后`user.Uid`就是插入成功之后的自增ID。 @@ -267,14 +267,14 @@ bulk 为 1 时,将会顺序插入 slice 中的数据 继续上面的例子来演示更新操作,现在user的主键已经有值了,此时调用Insert接口,beego orm内部会自动调用update以进行数据的更新而非插入操作。 ```Go - o := orm.NewOrm() - user := User{Uid: 1} - if o.Read(&user) == nil { - user.Name = "MyName" - if num, err := o.Update(&user); err == nil { - fmt.Println(num) - } +o := orm.NewOrm() +user := User{Uid: 1} +if o.Read(&user) == nil { + user.Name = "MyName" + if num, err := o.Update(&user); err == nil { + fmt.Println(num) } +} ``` Update 默认更新所有的字段,可以更新指定的字段: ```Go @@ -293,44 +293,44 @@ beego orm的查询接口比较灵活,具体使用请看下面的例子 例子1,根据主键获取数据: ```Go - o := orm.NewOrm() - var user User - - user := User{Id: 1} +o := orm.NewOrm() +var user User - err = o.Read(&user) +user := User{Id: 1} - if err == orm.ErrNoRows { - fmt.Println("查询不到") - } else if err == orm.ErrMissPK { - fmt.Println("找不到主键") - } else { - fmt.Println(user.Id, user.Name) - } +err = o.Read(&user) + +if err == orm.ErrNoRows { + fmt.Println("查询不到") +} else if err == orm.ErrMissPK { + fmt.Println("找不到主键") +} else { + fmt.Println(user.Id, user.Name) +} ``` 例子2: ```Go - o := orm.NewOrm() - var user User +o := orm.NewOrm() +var user User - qs := o.QueryTable(user) // 返回 QuerySeter - qs.Filter("id", 1) // WHERE id = 1 - qs.Filter("profile__age", 18) // WHERE profile.age = 18 +qs := o.QueryTable(user) // 返回 QuerySeter +qs.Filter("id", 1) // WHERE id = 1 +qs.Filter("profile__age", 18) // WHERE profile.age = 18 ``` 例子3,WHERE IN查询条件: ```Go - qs.Filter("profile__age__in", 18, 20) - // WHERE profile.age IN (18, 20) +qs.Filter("profile__age__in", 18, 20) +// WHERE profile.age IN (18, 20) ``` 例子4,更加复杂的条件: ```Go - qs.Filter("profile__age__in", 18, 20).Exclude("profile__lt", 1000) - // WHERE profile.age IN (18, 20) AND NOT profile_id < 1000 +qs.Filter("profile__age__in", 18, 20).Exclude("profile__lt", 1000) +// WHERE profile.age IN (18, 20) AND NOT profile_id < 1000 ``` @@ -339,15 +339,15 @@ beego orm的查询接口比较灵活,具体使用请看下面的例子 例子1,根据条件age>17,获取20位置开始的10条数据的数据 ```Go - var allusers []User - qs.Filter("profile__age__gt", 17) - // WHERE profile.age > 17 +var allusers []User +qs.Filter("profile__age__gt", 17) +// WHERE profile.age > 17 ``` 例子2,limit默认从10开始,获取10条数据 ```Go - qs.Limit(10, 20) - // LIMIT 10 OFFSET 20 注意跟SQL反过来的 +qs.Limit(10, 20) +// LIMIT 10 OFFSET 20 注意跟SQL反过来的 ``` ## 删除数据 @@ -356,10 +356,10 @@ beedb提供了丰富的删除数据接口,请看下面的例子 例子1,删除单条数据 ```Go - o := orm.NewOrm() - if num, err := o.Delete(&User{Id: 1}); err == nil { - fmt.Println(num) - } +o := orm.NewOrm() +if num, err := o.Delete(&User{Id: 1}); err == nil { + fmt.Println(num) +} ``` Delete 操作会对反向关系进行操作,此例中 Post 拥有一个到 User 的外键。删除 User 的时候。如果 on_delete 设置为默认的级联操作,将删除对应的 Post @@ -367,15 +367,15 @@ Delete 操作会对反向关系进行操作,此例中 Post 拥有一个到 Use 有些应用却需要用到连接查询,所以现在beego orm提供了一个简陋的实现方案: ```Go - type Post struct { - Id int `orm:"auto"` - Title string `orm:"size(100)"` - User *User `orm:"rel(fk)"` - } +type Post struct { + Id int `orm:"auto"` + Title string `orm:"size(100)"` + User *User `orm:"rel(fk)"` +} - var posts []*Post - qs := o.QueryTable("post") - num, err := qs.Filter("User__Name", "slene").All(&posts) +var posts []*Post +qs := o.QueryTable("post") +num, err := qs.Filter("User__Name", "slene").All(&posts) ``` 上面代码中我们看到了一个struct关联查询 @@ -386,11 +386,11 @@ Delete 操作会对反向关系进行操作,此例中 Post 拥有一个到 Use 针对有些应用需要用到group by的功能,beego orm也提供了一个简陋的实现 ```Go - qs.OrderBy("id", "-profile__age") - // ORDER BY id ASC, profile.age DESC +qs.OrderBy("id", "-profile__age") +// ORDER BY id ASC, profile.age DESC - qs.OrderBy("-profile__age", "profile") - // ORDER BY profile.age DESC, profile_id ASC +qs.OrderBy("-profile__age", "profile") +// ORDER BY profile.age DESC, profile_id ASC ``` 上面的代码中出现了两个新接口函数 @@ -406,30 +406,30 @@ Having:用来指定having执行的时候的条件 ```Go - o := NewOrm() - var r RawSeter - r = o.Raw("UPDATE user SET name = ? WHERE name = ?", "testing", "slene") +o := NewOrm() +var r RawSeter +r = o.Raw("UPDATE user SET name = ? WHERE name = ?", "testing", "slene") ``` 复杂原生sql使用: ```Go func (m *User) Query(name string) []User { - var o orm.Ormer - var rs orm.RawSeter - o = orm.NewOrm() - rs = o.Raw("SELECT * FROM user "+ - "WHERE name=? AND uid>10 "+ - "ORDER BY uid DESC "+ - "LIMIT 100", name) - var user []User - num, err := rs.QueryRows(&user) - if err != nil { - fmt.Println(err) - } else { - fmt.Println(num) - return user - } +var o orm.Ormer +var rs orm.RawSeter +o = orm.NewOrm() +rs = o.Raw("SELECT * FROM user "+ + "WHERE name=? AND uid>10 "+ + "ORDER BY uid DESC "+ + "LIMIT 100", name) +var user []User +num, err := rs.QueryRows(&user) +if err != nil { + fmt.Println(err) +} else { + fmt.Println(num) + return user +} } ```