GORM概述

简介: GORM概述

前言

官网文档另人看的头疼,还是记录一些常用的api吧,基本都是复制官方文档做些例子。

GORM给我最直观的感受:程序员只需关系结构体,操作结构体,无需关注如何操作数据库。

优点:提高开发效率

缺点:使用反射牺牲性能,牺牲灵活性

GORM保护数据的安全,比如说结构体删除了某个字段,原来在数据库中的表不会删那个字段。结构体指定改了表名,原来生成的表不会被删除。其将有数据安全风险的可能全部规避掉,交由开发人员手动去筛查。

概述

数据表 <===> 结构体
数据行 <===> 结构体实例
字段  <===> 结构体字段

快速入门

db.AutoMigrate(&UserInfo{}):意思是自动迁移,自动迁移为给定模型运行自动迁移,只会添加缺少的字段,不会删除/更改当前数据。就是说如果结构体加了新的字段,会给表也加上新字段。

db.Create()传递一个结构体,自动找到结构体对应的表,并将结构体的值作为一条记录插入表中,可以传指针或者非指针,都可以。

db.First()传递一个结构体的指针,自动找到结构体对应的表,并将表中第一条记录赋值给结构体,必须因为指针。

db.Find(out,where...)按照条件查询,传递一个结构体的指针,自动找到结构体对应的表,并按照where中的条件查询记录,赋值给结构体。还有很多查询的语法,后续再说。

db.Model().Update()传递一个查询出来有值结构体,通过Updata将其对应的字段更新,并传递到表中。

db.Delete(&u)删除传递进来的数据库对应的记录。

package main
import (
  "fmt"
  "github.com/jinzhu/gorm"
  _ "github.com/jinzhu/gorm/dialects/mysql"
)
// UserInfo 用户信息
type UserInfo struct {
  ID     uint
  Name   string
  Gender string
  Hobby  string
}
func main() {
  db, err := gorm.Open("mysql", "root:123456@tcp(127.0.0.1:3306)/gormDB?charset=utf8mb4&parseTime=True&loc=Local")
  if err != nil {
    panic(err)
  }
  defer db.Close()
  // 自动迁移
  db.AutoMigrate(&UserInfo{})
  u1 := UserInfo{1, "武旭飞", "男", "篮球"}
  u2 := UserInfo{2, "旭飞", "女", "足球"}
  // 创建记录
  db.Create(&u1)
  db.Create(&u2)
  // 查询第一条记录
  var u = new(UserInfo)
  db.First(&u)
  fmt.Printf("%#v\n", u)
  // 按条件查询
  var uu UserInfo
  db.Find(&uu, "hobby=?", "足球")
  fmt.Printf("%#v\n", uu)
  // 更新
  db.Model(&u).Update("hobby", "双色球")
  // 删除
  db.Delete(&u)
}
目录
相关文章
|
SQL 关系型数据库 MySQL
gin框架学习-Gorm入门指南
Snake Case命名风格,就是各个单词之间用下划线(_)分隔,首字母大写区分一个单词,例如: CreateTime的Snake Case风格命名为create_time
438 0
gin框架学习-Gorm入门指南
|
6月前
|
JSON 数据库 数据格式
gorm 自定义数据的使用
gorm 自定义数据的使用
52 0
|
6月前
|
SQL Go 数据库
gorm 教程 一(1)
gorm 教程 一
74 0
|
6月前
|
6月前
|
数据库
gorm 教程 一(2)
gorm 教程 一
80 0
|
6月前
|
SQL 数据库
|
6月前
|
SQL 数据库
gorm 教程 一(3)
gorm 教程 一
93 0
|
SQL 安全 数据库
GORM V2 写操作
GORM V2 写操作
50 0
|
SQL 存储 关系型数据库
GORM 极速入门
GORM 极速入门
280 0
|
Go 数据库
Golang:gorm的常用CRUD操作
Golang:gorm的常用CRUD操作
206 0
Golang:gorm的常用CRUD操作