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

最新文章

  1. [机器学习] 在茫茫人海中发现相似的你:实现局部敏感哈希(LSH)并应用于文档检索
  2. Lucene.net站内搜索—4、搜索引擎第一版技术储备(简单介绍Log4Net、生产者消费者模式)
  3. PHP 采集
  4. BurpSuite实例教程
  5. action script 3如何检测播放器域
  6. LNA和PA
  7. Visual Studio 如何给生成的exe加入多个图标资源
  8. Spring -- 配置bean的三种方法
  9. 程序员的自我救赎---1.4.1:核心框架讲解(DAL)
  10. Codeforces 777B Game of Credit Cards
  11. C语言中数组转化为字符串的方法
  12. solution for python can not import local module
  13. 【Spark篇】---Spark解决数据倾斜问题
  14. css选择器以及使用场景
  15. React native中的组建通知通信:
  16. css3实现画对号动画
  17. docker容器资源配额控制
  18. pthread_cleanup_push与pthread_cleanup_pop与pthread_cancel与pthread_testcancel
  19. ORA:01745 无效的主机 绑定变量名
  20. MD5做为文件名。机器唯一码有电脑的CPU信息和MAC地址,这两个信息需要在linux或unix系统下才能获取吧。

热门文章

  1. 修改opencart extension插件代码后无法重新安装的解决办法
  2. amp加载速度比标准移动页面快85%
  3. 15-cmake语法-math
  4. 常用dos命令(4)
  5. Iptables不适用与socks协议吗?
  6. 9-3 deepsort在win10配置
  7. docker nginx 命令。
  8. Console工程下如何不显示控制台黑窗口只显示Windows窗口
  9. 网络协议 17 - HTTPDNS
  10. 二分类问题F-score评判指标(转载)