MVC實踐一:編寫模型 1> 打開mysql資料庫,設計表的結構 <1>登錄mysql資料庫,如下 <2>這三個標註的參數皆有用,需要謹記。 <3>創建名為test的資料庫,創建user表,欄位設計如下圖所示: 2> 在vs code中新建一個模型,命名為user.go,對應mysql資料庫中的us ...
MVC實踐一:編寫模型
1> 打開mysql資料庫,設計表的結構
<1>登錄mysql資料庫,如下
<2>這三個標註的參數皆有用,需要謹記。
<3>創建名為test的資料庫,創建user表,欄位設計如下圖所示:
2> 在vs code中新建一個模型,命名為user.go,對應mysql資料庫中的user表。其代碼如下:
package models import ( "fmt" "github.com/astaxie/beego/orm" _ "github.com/go-sql-driver/mysql" ) // 用戶 type User struct{ Id int64 `orm:"auto"` Name string `orm:"size(100)"` Nickname string `orm:"size(100)"` Pwd string `orm:"size(100)"` Email string `orm:"size(100)"` Sex string `orm:"size(2)"` Roleid string `orm:"size(100)"` Status int64 Phone string `orm:"size(16)"` } //新增用戶 func Create(uid int64,name string,nickname string,pwd string,email string, sex string,roleId string,status int64, phone string,) (user User){ //查詢用戶是否已存在 user, err := QueryById(uid) if err == true{ return user }else{ o := orm.NewOrm() o.Using("default") newuser:=new(User); //賦值給模型 newuser.Id = uid newuser.Name = name newuser.Nickname=nickname newuser.Pwd = pwd newuser.Email = email newuser.Sex = sex newuser.Roleid =roleId newuser.Status =status newuser.Phone = phone //新增數據 o.Insert(newuser) return *newuser } } //刪除用戶 func DeleteById(id int64) bool { o := orm.NewOrm() o.Using("default") //根據ID得到用戶模型 if num, err := o.Delete(&User{Id: id}); err == nil { fmt.Println("刪除影響的行數:") fmt.Println(num) return true }else{ return false } } //更新用戶 func UpdateById(id int,table string,filed map[string] interface{})bool{ o := orm.NewOrm() _, err := o.QueryTable( table).Filter( "Id", id).Update( filed) if err == nil{ return true } return false } //根據用戶ID查詢用戶 func QueryById(uid int64) (User, bool){ o := orm.NewOrm() u := User{Id: uid} err := o.Read(&u) if err == orm.ErrNoRows { fmt.Println("查詢不到") return u,false } else if err == orm.ErrMissPK { fmt.Println("找不到主鍵") return u,false } else { fmt.Println(u.Id, u.Name) return u,true } } //根據用戶名稱查詢用戶 func QueryByName(name string) (User, error) { var user User o := orm.NewOrm() qs := o.QueryTable("user") err := qs.Filter("Name", name).One(&user) fmt.Println(err) if err == nil { fmt.Println(user.Name) return user,nil } return user, err } //根據用戶數據列表 func DataList() (users []User) { o := orm.NewOrm() qs := o.QueryTable("user") var us []User cnt, err := qs.Filter("id__gt", 0).OrderBy("-id").Limit(10, 0).All(&us) if err == nil { fmt.Printf("count", cnt) } return us } //查詢語句,sql語句的執行 //格式類似於:o.Raw("UPDATE user SET name = ? WHERE name = ?", "testing", "slene") // func QueryBySql(sql string, qarms[] string) bool{ o := orm.NewOrm() //執行sql語句 o.Raw(sql, qarms) return true } //根據用戶分頁數據列表 func LimitList(pagesize int,pageno int) (users []User) { o := orm.NewOrm() qs := o.QueryTable("user") var us []User cnt, err := qs.Limit(pagesize, (pageno-1)*pagesize).All(&us) if err == nil { fmt.Printf("count", cnt) } return us } //根據用戶數據總個數 func GetDataNum() int64 { o := orm.NewOrm() qs := o.QueryTable("user") var us []User num, err := qs.Filter("id__gt", 0).All(&us) if err == nil { return num }else{ return 0 } } //初始化模型 func init() { // 需要在init中註冊定義的model orm.RegisterModel(new(User)) }
3> 在main.go文件中添加代碼,註冊驅動,連接mysql資料庫
package main import ( "fmt" _ "webapp/routers" "github.com/astaxie/beego" "github.com/astaxie/beego/orm" _ "github.com/go-sql-driver/mysql" ) func init(){ dbhost := beego.AppConfig.String("dbhost") dbport := beego.AppConfig.String("dbport") dbuser := beego.AppConfig.String("dbuser") dbpassword := beego.AppConfig.String("dbpassword") db := beego.AppConfig.String("db") //註冊mysql Driver orm.RegisterDriver("mysql", orm.DRMySQL) //構造conn連接 //用戶名:密碼@tcp(url地址)/資料庫 conn := dbuser + ":" + dbpassword + "@tcp(" + dbhost + ":" + dbport + ")/" + db + "?charset=utf8" //註冊資料庫連接 orm.RegisterDataBase("default", "mysql", conn) fmt.Printf("資料庫連接成功!%s\n", conn) } func main() { o := orm.NewOrm() o.Using("default") // 預設使用 default,你可以指定為其他資料庫 beego.Run() }
4> Config.go文件的代碼如下:
5> 模型的編寫暫時到此為止,之後進行控制器的編寫,使用這些模型以及對應的方法