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