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
}

results matching ""

    No results matching ""