Beego學習筆記四:編寫Model


 

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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM