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> 模型的編寫暫時到此為止,之后進行控制器的編寫,使用這些模型以及對應的方法
