gorm简单的crud | 青训营

84 阅读1分钟

ORM概念

对象关系映射(Object Relational Mapping,简称ORM) 将相应的数据库语句抽象成编程语言函数,类,接口之类的,在代码上进行统一

  • 数据库的表(table) --> 类(class)
  • 记录(record,行数据)--> 对象(object)
  • 字段(field)--> 对象的属性(attribute)

安装依赖

  • mysql依赖
  • gorm依赖
go get -u gorm.io/driver/mysql
go get -u gorm.io/gorm

引入包

import(
	"gorm.io/driver/mysql" 
	"gorm.io/gorm"
)

连接数据库

  • 注意使用者和数据库的名字别弄混了
username := "searchdata" // 使用者名字 如root
password := "123456"
host := "127.0.0.1"
port := 3306
dbname := "userdata"     // 数据库名字

dsn := fmt.Sprintf("%s:%s@tcp(%s:%d)/%s?charset=utf8&parseTime=True&loc=Local", username, password, host, port, dbname)
  
db,err := gorm.Open(mysql.Open(dsn), &gorm.Config{})

创建数据表

  • 根据结构体创建相应的数据表
// 可以一次创建一个或者多个数据表
db.AutoMigrate(&User{},&Account{}...)

创建关联表的struct

  • 通过gorm可以在数据表中重命名
  • 但是在go文件中仍然使用大写命名
// 在库下面的表名为student的表
type student struct {
    Name string `gorm:"name"`
    Age  int    `gorm:"age"`
}

插入数据

  • 可以使用for循环遍历插入或者切片直接插入
// 插入一条数据
info := students{"Tom", 20}
// 插入多条数据
info := []students{{"Tom", 20},{"Marry", 18}}

// 数据库操作
result := db.Create(&info)

查询数据

  • 查询可以设置条件查询和一次查询多个数据段
// 查询第一条 age == 20  
info := students{}
result := db.Where("age = ?", 20).First(&info)

// 查询所有 age == 20
info := []students{}
result := db.Where("age = ?", 20).Find(&info)

// and条件
result := db.Where("name = ? AND age >= ?","Tom",19).Find(&info)

// or条件
result := db.Where("name = ?", "Tom").Or("age >= ?", 19).Find(&info)

// limit & offset
result := db.Limit(10).Offset(5).Find(&info)

修改数据

// 修改某列
result := db.Model(&info).Where("name = ?", "Tom").Update("age", 15)

// 修改多列
result := db.Model(&info).Where("name = ?", "Tom").Updates(students{"Tom",21})

删除数据

result := db.Where("name = ?", "Tom").Delete(&info)