前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Beego学习——orm实现简单的crud

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

作者头像
传说之下的花儿
发布2023-04-16 14:51:18
2030
发布2023-04-16 14:51:18
举报
代码语言: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: %v\n", 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: %v\n", 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")

}
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2021-09-11,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档