zoukankan      html  css  js  c++  java
  • 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
    ", conn)
    }
    func main() {
        o := orm.NewOrm()
        o.Using("default") // 默认使用 default,你可以指定为其他数据库
        
    	beego.Run()
    }
    

      

    4>     Config.go文件的代码如下:

     

    5>     模型的编写暂时到此为止,之后进行控制器的编写,使用这些模型以及对应的方法

  • 相关阅读:
    How to change the property of a control from a flowlayoutpanel?
    Add controls dynamically in flowlayoutpanel
    CLR via C# 读书笔记 6-2 不同AppDomain之间的通信 z
    应用程序域 z
    C# 在SQLite数据库中存储图像 z
    Using .NET 4's Lazy<T> 实现单实例
    tpl demo
    SQLite批量插入,修改数据库 zt
    Dev表格导出工具类 z
    easyui 设置一加载,搜索框立即弹出的效果
  • 原文地址:https://www.cnblogs.com/tudaogaoyang/p/7940697.html
Copyright © 2011-2022 走看看