为了账号安全,请及时绑定邮箱和手机立即绑定

Golang学习笔记之Golang与Mysql交互二、gorm

标签:
Go

• gorm创建的表结尾默认加s
• 如果使用MySQL创建表,使用gorm进行增删查改注意字段名小写。

数据库连接
func init() {
    var err error    //第⼀步:打开数据库,格式是 ⽤户名:密码@/数据库名称?编码⽅式
    db, err = gorm.Open("mysql", "root:123@/mydb?charset=utf8")    if err != nil {
        panic(err)
    }
}
创建表
package mainimport (

    _ "github.com/go-sql-driver/mysql"
    "github.com/jinzhu/gorm")//Test 表type Test struct {
    ID        int    `gorm:"primary_key"`
    Name      string `gorm:"type:varchar(128);unique_index:hash_idx"`
    Password  string}

var db *gorm.DB

func init() {
    var err error    //第⼀步:打开数据库,格式是 ⽤户名:密码@/数据库名称?编码⽅式
    db, err = gorm.Open("mysql", "root:123@/mydb?charset=utf8")    if err != nil {
        panic(err)
    }
}
func main() {    //创建表
    if !db.HasTable(&Test{}) {        if err := db.CreateTable(&Test{}).Error; err != nil {
            panic(err)
        }
    }
}
插入
    //插入数据
    Test := &Test{
        ID:       1,
        Name:     "黄哲",
        Password: "123",
    }    if err := db.Create(Test).Error; err != nil {
        fmt.Println(err)        return
    }
删除
//删除数据,where匹配条件,然后删除,链式调用
    if err := db.Where("ID = ?",1).Delete(Test{}).Error; err != nil {
        fmt.Println(err)        return
    }
查询
    var count int    var count1 int    var test Test    var test1 []Test    //Where匹配条件,Find指定表,Count获取数量,获取单个匹配的数据时
    db.Where("id = ?", 2).Find(&Test{}).Count(&count)    //Model指定表,Where匹配条件,count获取数量,多个字段可以匹配时
    db.Model(&Test{}).Where("id > ?", 1).Count(&count1)    //Scan会将查找到的数据写入test中
    db.Where("id = ?", 1).Find(&Test{}).Scan(&test)
    db.Model(&Test{}).Where("id > ?", 1).Scan(&test1)
    fmt.Println(count)
    fmt.Println(count1)
    fmt.Println(test)
    fmt.Println(test1)

• db.First获取第一条记录
• db.Where查询条件

输出


webp

更新数据
    //更新数据
    db.Model(&Test{}).Where("id = ?", 1).Updates(Test{Password: "112323"})
错误处理

所有的函数都是链式的,全部都返回 db 对象,任何时候调用 db.Error 就能获取到错误信息,例如上面的更新数据

 err := db.Model(&Test{}).Where("id = ?", 1).Updates(Test{Password: "112323"}).Error
事务处理
package mainimport (
    _ "github.com/go-sql-driver/mysql"
    "github.com/jinzhu/gorm")//Animal 表type Animal struct {
    ID   int
    Name string
}

var db1 *gorm.DB

func init() {
    var err error    //第⼀步:打开数据库,格式是 ⽤户名:密码@/数据库名称?编码⽅式
    db1, err = gorm.Open("mysql", "root:123@/mydb?charset=utf8")    if err != nil {
        panic(err)
    }
}func main() {
    CreateAnimals(db1)

}func CreateAnimals(db *gorm.DB) error {    //开启事务
    tx := db.Begin()    if err := tx.Create(&Animal{Name: "Giraffe"}).Error; err != nil {        //回退
        tx.Rollback()        return err
    }    if err := tx.Create(&Animal{Name: "Lion"}).Error; err != nil {        //回退
        tx.Rollback()        return err
    }    //成功
    tx.Commit()    return nil
}

demo

package mainimport (    "fmt"

    _ "github.com/go-sql-driver/mysql"
    "github.com/jinzhu/gorm")//Test 表type Test struct {
    ID       int    `gorm:"primary_key"`
    Name     string `gorm:"type:varchar(128);unique_index:hash_idx"`
    Password string}
var db *gorm.DB
func init() {
    var err error    //第⼀步:打开数据库,格式是 ⽤户名:密码@/数据库名称?编码⽅式
    db, err = gorm.Open("mysql", "root:123@/mydb?charset=utf8")    if err != nil {
        panic(err)
    }
}
func main1() {    //创建表
    if !db.HasTable(&Test{}) {        if err := db.CreateTable(&Test{}).Error; err != nil {
            panic(err)
        }
    }    // //插入数据
    // Te := &Test{
    //  ID:       6,
    //  Name:     "王五",
    //  Password: "123",
    // }
    // if err := db.Create(Te).Error; err != nil {
    //  fmt.Println(err)
    // }

    // //删除数据,where匹配条件,然后删除,链式调用
    // if err := db.Where("ID = ?",1).Delete(Test{}).Error; err != nil {
    //  fmt.Println(err)
    // }

    //查询数据
    var count int
    var count1 int
    var test Test
    var test1 []Test    //Where匹配条件,Find指定表,Count获取数量,获取单个匹配的数据时
    db.Where("id = ?", 2).Find(&Test{}).Count(&count)    //Model指定表,Where匹配条件,count获取数量,多个字段可以匹配时
    db.Model(&Test{}).Where("id > ?", 1).Count(&count1)    //Scan会将查找到的数据写入test中
    db.Where("id = ?", 1).Find(&Test{}).Scan(&test)
    db.Model(&Test{}).Where("id > ?", 1).Scan(&test1)
    fmt.Println(count)
    fmt.Println(count1)
    fmt.Println(test)
    fmt.Println(test1)    // //更新数据
    // err := db.Model(&Test{}).Where("id = ?", 1).Updates(Test{Password: "112323"}).Error
    // fmt.Println(err)



作者:学生黄哲
链接:https://www.jianshu.com/p/b566a4e9cf81


点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
全栈工程师
手记
粉丝
233
获赞与收藏
1008

关注作者,订阅最新文章

阅读免费教程

  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号

举报

0/150
提交
取消