beego框架orm中curd

一、安装包

因为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)}

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,504评论 6 496
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,434评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,089评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,378评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,472评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,506评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,519评论 3 413
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,292评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,738评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,022评论 2 329
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,194评论 1 342
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,873评论 5 338
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,536评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,162评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,413评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,075评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,080评论 2 352

推荐阅读更多精彩内容