浅谈Go与Gorm(二)

180 阅读2分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第22天,点击查看活动详情

今天接着学习Go的Gorm框架来操作数据库,今天来介绍字段含义以及如何连接数据库,这一个非常对开发人员非常友好的ORM库,和我一起来学习下吧!

字段概述

gorm.Model

在上一篇文章中提到的结构体定义中,有出现一个gorm.Model这个字段,点开源码的定义如下:

//gorm.Model的结构定义
type Model struct {
   ID        uint `gorm:"primary_key"`
   CreatedAt time.Time
   UpdatedAt time.Time
   DeletedAt *time.Time `sql:"index"`
}

例如定义一个User,gorm.Model字段就可以将ID, CreatedAt, UpdatedAt, DeletedAt 注入到 User 模型中

type User struct {
   gorm.Model
   Name string
   age  int
}

也可以使用ID作为主键名称,GORM默认这么使用,也可以使用标签gorm:"primary_key"来设置主键

type User struct {
   ID   int
   //或者
   UserId int64 `gorm:"primary_key"`
   Name string
   age  int
}

表名设置

如果定义一个结构体,那么对应的表名就是结构体名称的复数形式,例如:

type User struct{}  // 表名为: users

可以通过修改TableName方法,来设置 User 的表名为 YYQQ

func (User) TableName() string {
  return "YYQQ"
}

可以通过设置SingularTable()传入true,可以禁用将表名设置为复数

db.SingularTable(true)

也可以通过db.Table指定创建表名

db.Table("YYQQ").CreateTable(&User{})
var YYQQ []User
// SELECT * FROM YYQQ;
db.Table("YYQQ").Find(&YYQQ)
//DELETE FROM YYQQ WHERE name = 'xiaoming';
db.Table("YYQQ").Where("name = ?", "xiaoming").Delete()

时间戳

CreatedAt字段类型的模型,将首次创建记为当前时间

db.Create(&user) // 将设置 `CreatedAt` 为当前时间

//可以使用`Update` 方法来更改默认时间
db.Model(&user).Update("CreatedAt", time.Now())

UpdatedAt字段类型的模型,将数据更新记为当前时间

db.Save(&user) // 保存 将设置 `UpdatedAt` 为当前时间
db.Model(&user).Update("name", "xiaoming") // 更新 将设置 `UpdatedAt` 为当前时间

连接数据库

第一步连接数据库之前,需要导入数据库驱动程序,使用 _可以初始化导入的包

import _ "github.com/go-sql-driver/mysql"

连接MySQL,想要正确的处理 time.Time ,需要带上 parseTime 参数

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

func main() {
  db, err := gorm.Open("mysql", "user:password@tcp(127.0.0.1:3306)/dbname?charset=utf8&parseTime=True&loc=Local")
  defer db.Close()
}

连接PostgreSQL

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

func main() {
  db, err := gorm.Open("postgres", "host=myhost port=myport user=gorm dbname=gorm password=mypassword")
  defer db.Close()
}

连接Sqlite3

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

func main() {
  db, err := gorm.Open("sqlite3", "test.db")
  defer db.Close()
}

连接SQL Server

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

func main() {
  db, err := gorm.Open("mssql", "sqlserver://username:password@localhost:1433?database=dbname")
  defer db.Close()
}

总结

今天浅谈了Go与Gorm(二),主要介绍了相关字段和数据库的连接,接下来会继续深入了解GORM的相关知识,对于一个刚入门的我来说,还有许多地方需要学习,有错误的地方欢迎大家指出,共同进步!!