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

Beego学习笔记四:编写Model的更多相关文章

  1. C#可扩展编程之MEF学习笔记(四):见证奇迹的时刻

    前面三篇讲了MEF的基础和基本到导入导出方法,下面就是见证MEF真正魅力所在的时刻.如果没有看过前面的文章,请到我的博客首页查看. 前面我们都是在一个项目中写了一个类来测试的,但实际开发中,我们往往要 ...

  2. kvm虚拟化学习笔记(四)之kvm虚拟机日常管理与配置

    KVM虚拟化学习笔记系列文章列表----------------------------------------kvm虚拟化学习笔记(一)之kvm虚拟化环境安装http://koumm.blog.51 ...

  3. Beego 学习笔记15:布局页面

    页面布局 1>     一个html页面由:head部分,body部分,内部css,内部js,外联css,外联的js这几部分组成.因此,一个布局文件也就需要针对这些进行拆分. 2>     ...

  4. Beego 学习笔记14:Session控制

    Session控制 1>     Session常用来作为全局变量使用,比如记录当前登录的用户,或者页面之间传递数据使用. 2>     Beego框架内置了 session 模块,目前 ...

  5. 官网实例详解-目录和实例简介-keras学习笔记四

    官网实例详解-目录和实例简介-keras学习笔记四 2018-06-11 10:36:18 wyx100 阅读数 4193更多 分类专栏: 人工智能 python 深度学习 keras   版权声明: ...

  6. go微服务框架kratos学习笔记四(kratos warden-quickstart warden-direct方式client调用)

    目录 go微服务框架kratos学习笔记四(kratos warden-quickstart warden-direct方式client调用) warden direct demo-server gr ...

  7. Hadoop学习笔记(5) ——编写HelloWorld(2)

    Hadoop学习笔记(5) ——编写HelloWorld(2) 前面我们写了一个Hadoop程序,并让它跑起来了.但想想不对啊,Hadoop不是有两块功能么,DFS和MapReduce.没错,上一节我 ...

  8. IOS学习笔记(四)之UITextField和UITextView控件学习

    IOS学习笔记(四)之UITextField和UITextView控件学习(博客地址:http://blog.csdn.net/developer_jiangqq) Author:hmjiangqq ...

  9. java之jvm学习笔记四(安全管理器)

    java之jvm学习笔记四(安全管理器) 前面已经简述了java的安全模型的两个组成部分(类装载器,class文件校验器),接下来学习的是java安全模型的另外一个重要组成部分安全管理器. 安全管理器 ...

随机推荐

  1. Vyos的基本配置

    修改用户密码 Enter configuration mode configure Set password set system login user [username] authenticati ...

  2. 【java异常】 org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): com.emptech.db.demo.mapper.master.MOmQuotaTBMapper.findOmQuotaTB

    <mapper namespace="com.emptech.db.demo.mapper.master.MOmQuotaTBMapper"> public inter ...

  3. CanvasRenderingContext2D.fillText(text, x, y [, maxWidth]);

    CanvasRenderingContext2D.fillText(text, x, y [, maxWidth]); [, maxWidth]的意思是,方括号代表可有可无,有fillText(tex ...

  4. 37 树莓派识别opencv-dnn

    https://heartbeat.fritz.ai/real-time-object-detection-on-raspberry-pi-using-opencv-dnn-98827255fa60 ...

  5. 原生ajax分页,无刷新分页,最简化。超简单,代码最少

    <html><script> var page=1; // 页面第一次加载,显示第一页 window.onload=function(){ ajax_go(1) } //分页的 ...

  6. IE和火狐的事件机制有什么区别

    1.IE的事件流是冒泡流,火狐支持冒泡流和捕获流. 2.阻止事件冒泡:IE---e.cancelBubble = true;    火狐---e.stopPropagation();

  7. 如何计算假设检验的功效(power)和效应量(effect size)?

    做完一个假设检验之后,如果结果具有统计显著性,那么还需要继续计算其效应量,如果结果不具有统计显著性,并且还需要继续进行决策的话,那么需要计算功效. 功效(power):正确拒绝原假设的概率,记作1-β ...

  8. UDF——监测指定点的物理量

    Fluent版本:2019 R1 Visual Studio版本:Visual Studio 2013 其他版本应该也是适用的 算例来源于:https://confluence.cornell.edu ...

  9. 加入mapstruct后出现 找不到符号 符号: 方法 setXX 的解决方法

    加入lombok解决 <build> <plugins> <plugin> <groupId>org.springframework.boot</ ...

  10. Python UDP小程序

    为了做UDP的测试,采用了nc和Python的服务器端. nc的安装和使用: yum install -y nc nc -vuz Python的UDP服务器端小程序: # -*- coding: UT ...