https://beego.me/docs/mvc/model/object.mdhttps://beego.me/docs/mvc/model/object.md
操作的四个方法 Read / Insert / Update / Delete
mysql数据库,设计表的结构
创建名为Person的数据库,创建user表,字段设计如下
mysql> create database Person CHARACTER SET utf8 COLLATE utf8_general_ci;
mysql> use Person
mysql> CREATE TABLE user(
id int not null auto_increment,
Name char(50),
Pwd char(50),
Email char(50),
Sex char(50),
Phone char(50),
primary key (id)
);
models 主要是负责数据库处理
# models目录下面 user.go
package models
import (
"github.com/astaxie/beego/orm"
)
// 用户信息
// 默认情况对应数据库的表名为:user
type User struct {
Id int64
Name string
Pwd string
Email string
Sex string
Phone string
}
func init() {
// 需要在init中注册定义的model
// orm.RegisterModel(new(User), new(Post), new(Profile), new(Tag))
orm.RegisterModel(new(User))
}
main.go 负责在运行时连接数据库根据模型创建数据库表
package main
import (
"mysite/models"
"fmt"
"github.com/astaxie/beego"
"github.com/astaxie/beego/orm"
_ "github.com/go-sql-driver/mysql"
)
func init() {
mysqlhost := beego.AppConfig.String("mysqlhost")
mysqlport := beego.AppConfig.String("mysqlport")
mysqluser := beego.AppConfig.String("mysqluser")
mysqlpass := beego.AppConfig.String("mysqlpass")
mysqldb := beego.AppConfig.String("mysqldb")
//注册mysql Driver
orm.RegisterDriver("mysql", orm.DRMySQL)
//注册数据库直接连接
// orm.RegisterDataBase("default", "mysql", "root:root@/orm_test?charset=utf8")
//用户名:密码@tcp(url地址)/数据库 ,名字对应app.conf配置数据库信息
conn := mysqluser + ":" + mysqlpass + "@tcp(" + mysqlhost + ":" + mysqlport + ")/" + mysqldb + "?charset=utf8"
//注册数据库连接
orm.RegisterDataBase("default", "mysql", conn)
fmt.Printf("数据库连接成功!%s\n", conn)
}
func main() {
// 插入数据
o := orm.NewOrm()
u := models.User{Name:"Victor", Pwd:"123qwee", Email:"qq@qq.com", Sex:"boy", Phone:"123123"}
id, err := o.Insert(&u)
fmt.Printf("ID: %d, ERR: %v\n", id, err)
beego.Run()
orm.Debug= true
beego.Run()
}
Insert
func main() {
orm.Debug= true
// 插入数据
o := orm.NewOrm()
u := models.User{Name:"Victor", Pwd:"123qwee", Email:"qq@qq.com", Sex:"boy", Phone:"123123"}
id, err := o.Insert(&u)
fmt.Printf("ID: %d, ERR: %v\n", id, err)
beego.Run()
}
Read
func main() {
orm.Debug= true
o := orm.NewOrm()
// 读取数据
user := models.User{Id: 4}
err := o.Read(&user)
if err != nil {
fmt.Printf("ERR: %v\n", err)
}else {
fmt.Println(user.Id, user.Name, user.Email )
}
beego.Run()
}
ReadOrCreate
尝试从数据库读取,不存在的话就创建一个
默认必须传入一个参数作为条件字段,同时也支持多个参数多个条件字段
func main() {
orm.Debug= true
o := orm.NewOrm()
// 尝试从数据库读取,不存在的话就创建一个
user := models.User{Name:"AI", Pwd:"123qwee", Email:"qq@qq.com", Sex:"boy", Phone:"123123"}
// 三个返回参数依次为:是否新创建的,对象 Id 值,错误
if created, id, err := o.ReadOrCreate(&user, "Name"); err == nil {
if created {
fmt.Println("New Insert an object. Id:", id)
} else {
fmt.Println("Get an object. Id:", id)
}
}
beego.Run()
}
InsertMulti
同时插入多个对象
类似sql语句
insert into table (name, age) values(“slene”, 28),(“astaxie”, 30),(“unknown”, 20)
func main() {
orm.Debug= true
o := orm.NewOrm()
// 同时插入多个对象
users := []models.User{
{Name:"qwe", Pwd:"123qwee", Email:"qq@qq.com", Sex:"boy", Phone:"123123"},
{Name:"asd", Pwd:"123qwee", Email:"qq@qq.com", Sex:"boy", Phone:"123123"},
}
// 第一个参数 bulk 为并列插入的数量,bulk 为 1 时,将会顺序插入 slice 中的数据
successNums, err := o.InsertMulti(100, users)
fmt.Printf("successNums: %d, ERR: %v\n", successNums, err)
beego.Run()
}
Update
第一个返回值为影响的行数
func main() {
orm.Debug= true
o := orm.NewOrm()
// Update 默认更新所有的字段,可以更新指定的字段
user := models.User{Id: 4}
user.Name = "my"
num, err := o.Update(&user)
// 只更新 Name
// o.Update(&user, "Name")
// 指定多个字段
// o.Update(&user, "Field1", "Field2", ...)
fmt.Printf("successNums: %d, ERR: %v\n", num, err)
beego.Run()
}
Delete
第一个返回值为影响的行数
func main() {
orm.Debug= true
o := orm.NewOrm()
// Delete
if num, err := o.Delete(&models.User{Id: 1}); err == nil {
fmt.Println(num)
}
beego.Run()
}