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") }