一、安装包
因为beego orm是独立的模块,所以需要单独安装包。
//安装beego orm包gogetgithub.com/beego/beego/v2/client/orm
安装mysql驱动
goget github.com/go-sql-driver/mysql
beego orm包操作什么数据库,就需要单独安装对应的数据库驱动。
二、导入包
import(
// 导入orm包
"github.com/beego/beego/v2/client/orm"
// 导入mysql驱动_"
github.com/go-sql-driver/mysql")
三、连接mysql数据库
操作数据库之前首先需要配置好mysql数据库连接参数,通常在beego项目中,我们都会在main.go文件,对数据库进行配置,方便整个项目操作数据库。
例子:
import (
"fmt"
_ "project/routers"
"github.com/astaxie/beego/orm"
beego "github.com/beego/beego/v2/server/web"
// 导入orm包
// 导入mysql驱动
_ "github.com/go-sql-driver/mysql"
)
// 通过init函数配置mysql数据库连接信息
func init() {
// 这里注册一个default默认数据库,数据库驱动是mysql.
// 第三个参数是数据库dsn, 配置数据库的账号密码,数据库名等参数
// dsn参数说明:
// username - mysql账号
// password - mysql密码
// db_name - 数据库名
// 127.0.0.1:3306 - 数据库的地址和端口
//orm.RegisterDataBase("default", "mysql", "root:root@tcp(127.0.0.1:3306)/cmf?charset=utf8&parseTime=true&loc=Local")
orm.RegisterDriver("mysql", orm.DRMySQL)
orm.RegisterDataBase("default", "mysql", "root:root@tcp(127.0.0.1:3306)/sys?charset=utf8")
orm.RegisterModel(new(Userinfo))
// 打开调试模式,开发的时候方便查看orm生成什么样子的sql语句
orm.Debug = true
}
四、定义模型(Model)
orm操作通常都是围绕struct对象进行,我们先定义一个表结构,方便后面演示数据库操作。
4.1 定义表结构
创建一个用户表
4.2 定义模型
package main
import (
"github.com/astaxie/beego/orm"
)
type Userinfo struct {
id int64
Username string
Passworld string
}
func init() {
orm.RegisterDataBase("default", "mysql", "root:root@/test?charset=utf8")
// register model
orm.RegisterModel(new(Userinfo)) //创建一个user_info表 UserInfo
}
func add(user *Userinfo) (int64, error) {
o := orm.NewOrm()
id, err := o.Insert(user)
return id, err
}
执行程序引入模型很多教程里面没有说明这一步
import (
"fmt"
_ "project/models"
)
五、插入数据
o := user.orm.NewOrm()
user := Userinfo{Username: "test", Passworld: "test"}
id, _ := o.Insert(&user)
例子2 批量插入数据:
o := orm.NewOrm()
orders := []Order{
{
ShopId:1, Uid:1001, Nickname:"大锤1", Address:"深圳南山区", InitTime: time.Now()}, {ShopId:1, Uid:1002, Nickname:"大锤2", Address:"深圳南山区", InitTime: time.Now()}, {ShopId:1, Uid:1003, Nickname:"大锤3", Address:"深圳南山区", InitTime: time.Now()},}
// 调用InsertMulti函数批量插入, 第一个参数指的是要插入多少数据
nums, err := o.InsertMulti(3, orders)
六、更新数据
orm的Update函数是根据主键id进行更新数据的,因此需要预先对id赋值。
例子:
o := orm.NewOrm()
// 需要更新的order对象
order := Order{}
// 先对主键id赋值, 更新数据的条件就是where id=2order.Id =2// 对需要更新的数据进行赋值order.Nickname ="小锤"order.Address ="深圳宝安区"// 调用Update函数更新数据, 默认Update根据struct字段,更新所有字段值,如果字段值为空也一样更新。// 等价sql: update orders set shop_id=0, customer_id=0, nickname='小锤', address='深圳宝安区', init_time='0000:00:00' where id = 2num, err := o.Update(&order)iferr !=nil{ fmt.Println("更新失败")}else{ fmt.Println("更新数据影响的行数:", num)}// 上面Update直接更新order结构体的所有字段,如果只想更新指定字段,可以这么写num, err := o.Update(&order,"Nickname","Address")// 这里只是更新Nickname和Address两个字段
七、查询数据
默认orm的Read函数也是通过主键id查询数据。
例子:
o := orm.NewOrm()
// 定义
orderorder := Order{}
// 先对主键id赋值, 查询数据的条件就是
where id=2order.Id =2
// 通过Read函数查询数据
// 等价
sql: select id, shop_id, customer_id, nickname, address, init_time from orders where id = 2
err := o.Read(&order)iferr == orm.ErrNoRows {
fmt.Println("查询不到")}elseiferr == orm.ErrMissPK { fmt.Println("找不到主键")}
else{ fmt.Println(order.Id, order.Nickname)}
// 通过ReadOrCreate函数,先尝试根据主键id查询数据,如果数据不存在则插入一条数据
created, id, err := o.ReadOrCreate(&order,"Id")
// ReadOrCreate返回三个参数,第一个参数表示是否插入了一条数据,第二个参数表示插入的id
八、删除数据
orm的Delete函数根据主键id删除数据。
例子:
o := orm.NewOrm()
// 定义orderorder := Order{}
// 先对主键id赋值, 删除数据的条件就是
where id=2order.Id =2
ifnum, err := o.Delete(&order); err !=nil{
fmt.Println("删除失败")}else{ fmt.Println("删除数据影响的行数:", num)}