栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Go语言

GORM框架基础学习

Go语言 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

GORM框架基础学习

连接MySQL基本实例
package main

import (
   "fmt"
   _ "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@(localhost:3306)/db1?charset=utf8mb4&parseTime=True&loc=Local")
   if err!= nil{
      panic(err)
   }
   defer db.Close()

   //自动迁移    自己现在SQLyog里创建一个db1的数据库
   db.AutoMigrate(&UserInfo{})

   u1 := UserInfo{1, "闫佳鹏", "男", "篮球"}
   u2 := UserInfo{2, "沙河娜扎", "女", "足球"}
   // 创建记录
   db.Create(&u1)
   db.Create(&u2)
   //查询
   var u = new(UserInfo)
   db.First(u)  //查询表中第一行的数据
   fmt.Printf("%#vn", u)

   var uu UserInfo
   //找到表中hobby是足球的那一行数据
   db.Find(&uu, "hobby=?", "足球")  
   fmt.Printf("%#vn", uu)

   // 更新
   db.Model(&u).Update("hobby", "双色球")//将上面查询的第一行数据中的hobby改为双色球
   // 删除
   db.Delete(&u)  //删除查询出的第一行数据
}
GORM模型定义示例
package main

import (
   "database/sql"
   _ "fmt"
   "github.com/jinzhu/gorm"
   _ "github.com/jinzhu/gorm/dialects/mysql"
   "time"
)
//定义模板
type User struct {
   gorm.Model  //内嵌gorm.Moderl
   Name         string
   Age          sql.NullInt64  //零值类型
   Birthday     *time.Time
   Email        string  `gorm:"type:varchar(100);unique_index"`
   Role         string  `gorm:"size:255"` // 设置字段大小为255
   MemberNumber *string `gorm:"unique;not null"` // 设置会员号(member number)唯一并且不为空
   Num          int     `gorm:"AUTO_INCREMENT"` // 设置 num 为自增类型
   Address      string  `gorm:"index:addr"` // 给address字段创建名为addr的索引
   IgnoreMe     int     `gorm:"-"` // 忽略本字段
}


func main() {
   //连接MySQL数据库
   db, err := gorm.Open("mysql", "root:123456@(localhost:3306)/db1?charset=utf8mb4&parseTime=True&loc=Local")
   if err!= nil{
      panic(err)
   }
   defer db.Close()

   db.AutoMigrate(&User{})


}
主键、表名、列名的约定 主键

GORM 默认会使用名为ID的字段作为表的主键。

package main

import (
   _ "fmt"
   "github.com/jinzhu/gorm"
   _ "github.com/jinzhu/gorm/dialects/mysql"
)

type User struct {
   ID   string // 名为`ID`的字段会默认作为表的主键
   Name string
}

// 使用`AnimalID`作为主键
type Animal struct {
   AnimalID int64 `gorm:"primary_key"`
   Name     string
   Age      int64
}

func main() {
   //连接MySQL数据库
   db, err := gorm.Open("mysql", "root:123456@(localhost:3306)/db1?charset=utf8mb4&parseTime=True&loc=Local")
   if err!= nil{
      panic(err)
   }
   defer db.Close()


   db.AutoMigrate(&User{})
   db.AutoMigrate(&Animal{})

}
表名
package main

import (
   _ "fmt"
   "github.com/jinzhu/gorm"
   _ "github.com/jinzhu/gorm/dialects/mysql"
)


// 使用`AnimalID`作为主键
type Animal struct {
   AnimalID int64 `gorm:"primary_key"`
   Name     string
   Age      int64
}

//将表名字设置为dongwu  但是在下面迁移会保证数据的安全所以会重新创建一个表
func (Animal) TableName() string  {
   return "dongwu"
}

func main() {
   //连接MySQL数据库
   db, err := gorm.Open("mysql", "root:123456@(localhost:3306)/db1?charset=utf8mb4&parseTime=True&loc=Local")
   if err!= nil{
      panic(err)
   }
   defer db.Close()


   db.AutoMigrate(&Animal{})

}
禁用默认表名的复数形式
// 禁用默认表名的复数形式,如果置为 true,则 `User` 的默认表名是 `user`
db.SingularTable(true)
Table()指定表名:
// 使用User结构体创建名为`deleted_users`的表
db.Table("deleted_users").CreateTable(&User{})
package main

import (
   _ "fmt"
   "github.com/jinzhu/gorm"
   _ "github.com/jinzhu/gorm/dialects/mysql"
)


// 使用`AnimalID`作为主键
type Animal struct {
   AnimalID int64 `gorm:"primary_key"`
   Name     string
   Age      int64
}


func main() {
   //连接MySQL数据库
   db, err := gorm.Open("mysql", "root:123456@(localhost:3306)/db1?charset=utf8mb4&parseTime=True&loc=Local")
   if err!= nil{
      panic(err)
   }
   defer db.Close()

   
   // 使用Animal结构体创建名为`deleted_Animal`的表
   db.Table("deleted_Animal").CreateTable(&Animal{})

}
GORM还支持更改默认表名称规则:
gorm.DefaultTableNameHandler = func (db *gorm.DB, defaultTableName string) string  {
  return "prefix_" + defaultTableName;
}
package main

import (
   _ "fmt"
   "github.com/jinzhu/gorm"
   _ "github.com/jinzhu/gorm/dialects/mysql"
)


// 使用`AnimalID`作为主键
type Animal struct {
   AnimalID int64 `gorm:"primary_key"`
   Name     string
   Age      int64
}


func main() {

   gorm.DefaultTableNameHandler = func (db *gorm.DB, defaultTableName string) string  {
      return "xxx_" + defaultTableName;
   }

   //连接MySQL数据库
   db, err := gorm.Open("mysql", "root:123456@(localhost:3306)/db1?charset=utf8mb4&parseTime=True&loc=Local")
   if err!= nil{
      panic(err)
   }
   defer db.Close()

   db.AutoMigrate(&Animal{})

}
列名 列名由字段名称进行下划线分割来生成
type User struct {
  ID        uint      // column name is `id`
  Name      string    // column name is `name`
  Birthday  time.Time // column name is `birthday`
  CreatedAt time.Time // column name is `created_at`
}
可以使用结构体tag指定列名:

格式:

`gorm:"column:beast_id"`

type Animal struct {
  AnimalId    int64     `gorm:"column:beast_id"`         // set column name to `beast_id`
  Birthday    time.Time `gorm:"column:day_of_the_beast"` // set column name to `day_of_the_beast`
  Age         int64     `gorm:"column:age_of_the_beast"` // set column name to `age_of_the_beast`
}
时间戳跟踪 CreatedAt

如果模型有 CreatedAt字段,该字段的值将会是初次创建记录的时间。

db.Create(&user) // `CreatedAt`将会是当前时间

// 可以使用`Update`方法来改变`CreateAt`的值
db.Model(&user).Update("CreatedAt", time.Now())
UpdatedAt

如果模型有UpdatedAt字段,该字段的值将会是每次更新记录的时间。

db.Save(&user) // `UpdatedAt`将会是当前时间

db.Model(&user).Update("name", "jinzhu") // `UpdatedAt`将会是当前时间
DeletedAt

如果模型有DeletedAt字段,调用Delete删除该记录时,将会设置DeletedAt字段为当前时间,而不是直接将记录从数据库中删除。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/990278.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号