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)