Beego学习——orm实现简单的crud

2023-04-16 14:51:18 浏览数 (1)

代码语言:javascript复制
package main

import (
	"fmt"
	"github.com/astaxie/beego/logs"
	"github.com/astaxie/beego/orm"
	_ "github.com/go-sql-driver/mysql"
)

// Model Struct
type User0 struct {
	Id   int    // beego 默认设置id为主键,自动递增
	Name string `orm:"size(100)"`
}

func init() {
	// 1. 数据库注册
	//  第一个参数是driverName,第二个参数是orm的类型对于三种数据库
	_ = orm.RegisterDriver("mysql", orm.DRMySQL)
	// 2. 数据库连接
	//  beego必须注册一个别名为default的数据库,作为默认使用。
	// 	第一个参数是数据库的别名,用来切换数据库使用。
	//	第二个是driverName,在RegisterDriver时注册的
	//	第三是数据库连接字符串:
	//	name:pwd@tcp(localhost:3306)/databaseName?charset=utf8
	//  相对于用户名:密码@数据库地址 名称?字符集
	//	第四个参数相当于: orm.SetMaxIdleConns("default", 30) 设置数据库的最大空闲连接。
	//  第五个参数相当于:orm.SetMaxOpenConns("default", 30) 设置数据库的最大数据库连接。
	_ = orm.RegisterDataBase("default", "mysql", "root:020826@tcp(localhost:3306)/beegostudy?charset=utf8", 30)

	// 注册模型
	// 如果使用 orm.QuerySeter 进行高级查询的话,这个是必须的。
	// 反之,如果只使用 Raw 查询和 map struct,是无需这一步的。
	orm.RegisterModel(new(User0))

	// 通过函数名,我们就可以大概猜到它的用途同步数据库, 它可以帮我们同步表的数据。
	// 	参数一 数据库别名,一般为default;
	//	参数二 为ture时自动帮我们创建表。(注意:如果设置为true,且表本身存在且有值的时候,会覆盖你的表)
	//	参数三 是否更新表
	_ = orm.RunSyncdb("default", false, true)
}
func InsertUser(name string) {
	//拿到句柄,操作数据库
	o := orm.NewOrm()
	user := User0{Name: "test"}
	id, err := o.Insert(&user)
	fmt.Printf("ID: %d, ERR: %vn", id, err)
}
func UpdateUser(id int) {
	//拿到句柄,操作数据库
	o := orm.NewOrm()
	user := User0{}
	user.Id = id
	// 查询的更新对象
	err := o.Read(&user)
	// 给对象从新赋值
	if err == nil {
		user.Name = "222"
		//更新数据库
		num, err := o.Update(&user)
		if err != nil {
			logs.Info("更新失败!")
			return
		}
		fmt.Printf("NUM: %d, ERR: %vn", num, err)
	} else {
		logs.Info("未找到该用户!")
		return
	}
}
func SelectUserById(id int) {
	o := orm.NewOrm()
	user := User0{}
	user.Id = id
	err := o.Read(&user, "id")
	if err != nil {
		logs.Info("查询失败!")
		return
	}
	logs.Info("查询成功", user)
}
func SelectUserByName(name string) *User0 {
	//拿到句柄,操作数据库
	o := orm.NewOrm()
	user := User0{}
	/*
		1. orm的read函数默认是用主键进行查询的,
		2. Read 默认通过查询主键赋值,也可以使用指定的字段进行查询。
		第一个参数是已经用所要查询字段的值初始化过后的对象
		第二个参数指定查询的字段,(注意是查询的字段不是查询字段的值,
		因此在指定一个查询字段时,新建一个model对象之后仍然要用所要查询字段的值初始化所要查询的字段)
	*/
	// 查询的字段值
	user.Name = name
	err := o.Read(&user, "name")
	if err != nil {
		logs.Info("查询失败", err)
		return nil
	} else {
		logs.Info("查询成功", user)
		return &user
	}
}
func DeleteUserByName(name string) bool {
	o := orm.NewOrm()
	// 调用查询方法 返回*User类型
	u := SelectUserByName(name)
	if u != nil {
		_, err := o.Delete(u)
		if err != nil {
			logs.Info("删除失败", err)
			return false
		}
		logs.Info("删除成功!")
		return true
	}
	logs.Info("删除失败,未找到该用户")
	return false
}

func main() {

	// insert
	//InsertUser("test")

	// update
	//UpdateUser(1)

	// select
	//SelectUserById(2)
	//SelectUserByName("222")

	// delete
	//DeleteUserByName("222")

}

0 人点赞