CRUD和原生SQL操作
文档对应视频课程中3.7、3.8、3.9、3.10章节,请小伙伴们对应学习。
这里对代码做了一些注释,和视频配合学习效果更佳。
package models
import (
//引入orm
"github.com/astaxie/beego/orm"
)
//操作数据库都需要定义struct和表结构对应
type User struct {
Id int
Name string
AddTime int64
Status int
Mobile string
Avatar string
}
//初始化注册对应model
func init() {
orm.RegisterModel(new(User))
}
//获取用户信息
func UserInfo(id int) (User, error) {
//通过orm中的Read函数获取
var (
err error
)
o := orm.NewOrm()
user := User{Id: id}
err = o.Read(&user)
return user, err
}
//保存用户
func Save(name string, mobile string, avatar string) error {
//通过orm中的Insert来保存
var (
err error
user User
)
o := orm.NewOrm()
//设置字段的值
user.Name = name
user.Mobile = mobile
user.Avatar = avatar
user.Status = 0
_, err = o.Insert(&user)
return err
}
//更新用户名
func UpdateUsername(id int, name string) error {
//通过orm中的Update来保存
var (
user User
err error
)
o := orm.NewOrm()
//先判断数据是否存在
user = User{Id: id}
if o.Read(&user) == nil {
//存在更新姓名
user.Name = name
_, err = o.Update(&user)
}
return err
}
//删除用户,通过ID删除数据
func Delete(id int) error {
//通过orm中的Delete来保存
var (
user User
err error
)
o := orm.NewOrm()
user = User{Id: id}
_, err = o.Delete(&user)
return err
}
//获取用户列表
func List() ([]User, error) {
var (
users []User
err error
)
o := orm.NewOrm()
//声明操作的表
qs := o.QueryTable("user")
//条件id大于10
qs = qs.Filter("id__gt", 10)
//返回几条数据
qs = qs.Limit(2)
//倒序是前面加上负号
qs = qs.OrderBy("-id")
//后面是设置返回的字段
qs.All(&users, "Id", "Name")
return users, err
}
//从这往下是通过原生sql操作数据库
//QueryRow 获取单条数据使用
//QueryRows 获取多条数据使用
//Exec 执行insert\update\delete语句
//通过sql获取用户信息
func SqlUserInfo(id int) (User, error) {
var (
user User
err error
)
o := orm.NewOrm()
err = o.Raw("SELECT `name`,`mobile` FROM user Where id=? LIMIT 1", id).QueryRow(&user)
return user, err
}
//通过sql保存用户
func SqlSave(name string, mobile string, avatar string) error {
var (
err error
)
o := orm.NewOrm()
_, err = o.Raw("INSERT INTO user (`name`, `mobile`, `avatar`, `status`) VALUES (?, ?, ?, ?)", name, mobile, avatar, 0).Exec()
return err
}
//原生sql修改用户名
func SqlUpdateUsername(id int, name string) error {
var (
err error
)
o := orm.NewOrm()
_, err = o.Raw("UPDATE user SET name=? WHERE id=?", name, id).Exec()
return err
}
//原生sql删除用户
func SqlDelete(id int) error {
o := orm.NewOrm()
_, err := o.Raw("DELETE FROM user WHERE id=?", id).Exec()
return err
}
//原生sql实现获取用户列表
func SqlList() (int64, []User, error) {
var (
users []User
)
o := orm.NewOrm()
num, err := o.Raw("SELECT * FROM user WHERE id>? ORDER BY id DESC LIMIT 2", 10).QueryRows(&users)
return num, users, err
}