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>     模型的编写暂时到此为止,之后进行控制器的编写,使用这些模型以及对应的方法

 

posted @ 2017-12-01 10:24  夜未央天未明  阅读(5705)  评论(0编辑  收藏  举报