代码语言: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")
}