beego ORM 对象基本操作

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()
}
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值