内容简介:• gorm创建的表结尾默认加s• 如果使用MySQL创建表,使用gorm进行增删查改注意字段名小写。• db.First获取第一条记录
开发人员友好的ORM库。
安装:
go get -u github.com/jinzhu/gorm
中文文档地址: http://gorm.book.jasperxu.com/
GitHub地址: https://github.com/jinzhu/gorm
• 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 main import ( _ "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查询条件
输出
更新数据
//更新数据 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 main import ( _ "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 main import ( "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) }
更多使用可以看中文文档,博文开头有
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:- Golang学习笔记之Golang与Mysql交互
- 16-《ARKit by Tutorials》读书笔记3:交互操作
- iOS 12 人机交互指南:交互(User Interaction)
- 生活NLP云服务“玩秘”站稳人机交互2.0语音交互场景
- asyncio之子进程交互
- 以太坊交互工具
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。