[TOC] > 数据表中字段是不区分大小写的 ## model 操作 ``` type HsDept struct { DEPT_ROOT_ID string `orm:"pk"` } orm.RegisterDriver("mysql", orm.DRMySQL) orm.RegisterDataBase("default", "mysql", "root:www.upsoft01.com@tcp(192.168.0.71:3306)/antdbms_test2?charset=utf8", 60) //需要添加这一步才能查找对应的数据表,不然会报错,找不到改表 orm.RegisterModel(new(HsDept)) ``` ## 在程序中直接调用自动建表 ``` // 数据库别名 name := "default" // drop table 后再建表 force := true // 打印执行过程 verbose := true // 遇到错误立即返回 err := orm.RunSyncdb(name, force, verbose) if err != nil { fmt.Println(err) } ``` ## row 的返回值 [推荐] `QueryRow` 或者`QueryRows` ``` type User struct { Id int UserName string } var user User err := o.Raw("SELECT id, user_name FROM user WHERE id = ?", 1).QueryRow(&user) ``` ## row 的返回值 [不推荐] 1. Values 返回带自带名的 数组 ``` var param []orm.Params _, e := o.Raw("sql 语句").Values(&param) beego.Debug(param) // [map[order_id:1 dept_id:1 dept_parent_id: name:指挥导控系统]] ``` 2. ValuesList 返回不带字段名的数组 ``` var param []orm.ParamsList _, e := o.Raw("sql 语句").ValuesList(&param) beego.Debug(param) //[[1 指挥导控系统 1]] ``` 3. ValuesFlat ``` var param orm.ParamsList _, e := o.Raw("sql 语句").ValuesFlat(&param) beego.Debug(param) // [1 指挥导控系统 1] ``` ## 数据库操作 ## CRUD 查询 ### 查 单条查询 ``` //查默认通过主键 user := HsUser{UserId: 146} err := o.Read(&user) fmt.Println(user) //指定查询条件 user := HsUser{UserName: "aaa", UserLogin: "aaa1"} err := o.Read(&user, "user_name", "user_login") //第二参数开始为条件 fmt.Println(user) //高级查询 var post Post //QueryTable(new(post)) 也支持此类写法 o.QueryTable("post").Filter("Content__istartswith", "prefix string").One(&post, "Id", "Title") ``` 多条查询 ``` // 只返回 Id 和 Title var posts []Post //QueryTable(new(post)) 也支持此类写法 o.QueryTable("post").Filter("Status", 1).All(&posts, "Id", "Title") ``` ### 增 1. 单个更新 ``` user.Name = "slene" user.IsActive = true id, err := o.Insert(&user) ``` 2. 多个更新 ``` users := []User{ {Name: "slene"}, {Name: "astaxie"}, {Name: "unknown"}, ... } //第一个参数 bulk 为并列插入的数量,第二个为对象的slice //bulk 为 1 时,将会顺序插入 slice 中的数据 successNums, err := o.InsertMulti(100, users) ``` ### 更新 ``` //1. 更新所有字段 user.UserName="update_pvj1" i, err := o.Update(&user) //2.更新指定字段 user.UserName="update_pvj1" Update(&user,"user_name",...) ``` ## 删除 ```go o.Delete(&User{Id: 1}) ``` ## 高级查询 ```go // 获取 QuerySeter 对象,user 为表名 qs := o.QueryTable("user") // 也可以直接使用对象作为表名 user := new(User) qs = o.QueryTable(user) // 返回 QuerySeter ``` ## 关系性数据库需要注意