golang之orm框架gorm快速开始(代码片段)

刘小豆豆豆 刘小豆豆豆     2022-12-05     266

关键词:

Gorm快速入门

Gorm是Go语言的ORM框架,其特点有:

  • 全特性 ORM (几乎包含所有特性)
  • 模型关联 (一对一, 一对多,一对多(反向), 多对多, 多态关联)
  • 钩子 (Before/After Create/Save/Update/Delete/Find)
  • 预加载
  • 事务
  • 复合主键
  • SQL 构造器
  • 自动迁移
  • 日志
  • 基于GORM回调编写可扩展插件
  • 全特性测试覆盖
  • 开发者友好

快速开始:

  1. 安装

    go get -u github.com/jinzhu/gorm
    
  2. 连接数据库:

       db, err := gorm.Open("mysql", "user:password@/dbname?charset=utf8&parseTime=True&loc=Local")
    	if err!= nil
    		panic(err)
    	
    	defer db.Close()
    
  3. 增删改查

    基本信息如下:

// UserInfo 用户信息
type UserInfo struct 
	ID uint
	Name string
	Gender string
	HA string

​ 增加:

u1 := UserInfo3, "枯藤", "男", "篮球"

db.Create(&u1)

​ 查询:

var u = new(UserInfo)
db.First(u)
fmt.Printf("%#v\\n", u)

​ 修改:

db.Model(&u).Update("hobby", "双色球")

​ 删除:

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
	HA string


func main() 
   db, err := gorm.Open("mysql", "user:password@/dbname?charset=utf8&parseTime=True&loc=Local")
	if err!= nil
		panic(err)
	
	defer db.Close()
	u1 := UserInfo3, "枯藤", "男", "篮球"
	u2 := UserInfo4, "topgoer.com", "女", "足球"
	// 创建记录
	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)

模型定义:

模型一般为Golang的结构体,Go的基本数据类型或者指针。

例子:

type User struct 
  gorm.Model
  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"` // 设置 memberNumber 字段唯一且不为空
  Num          int     `gorm:"AUTO_INCREMENT"` // 设置 Num字段自增
  Address      string  `gorm:"index:addr"` // 给Address 创建一个名字是  `addr`的索引
  IgnoreMe     int     `gorm:"-"` //忽略这个字段

支持的结构标签:

标签说明
Column指定列的名称
Type指定列的类型
Size指定列的大小,默认是 255
PRIMARY_KEY指定一个列作为主键
UNIQUE指定一个唯一的列
DEFAULT指定一个列的默认值
PRECISION指定列的数据的精度
NOT NULL指定列的数据不为空
AUTO_INCREMENT指定一个列的数据是否自增
INDEX创建带或不带名称的索引,同名创建复合索引
UNIQUE_INDEX类似 索引,创建一个唯一的索引
EMBEDDED将 struct 设置为 embedded
EMBEDDED_PREFIX设置嵌入式结构的前缀名称
-忽略这些字段

规范:

gorm.Model 是一个包含一些基本字段的结构体, 包含的字段有 IDCreatedAtUpdatedAtDeletedAt

可以用它来嵌入到模型中,或者也可以用它来建立自己的模型。

// gorm.Model 定义
type Model struct 
  ID        uint `gorm:"primary_key"`
  CreatedAt time.Time
  UpdatedAt time.Time
  DeletedAt *time.Time


// 将字段 `ID`, `CreatedAt`, `UpdatedAt`, `DeletedAt` 注入到 `User` 模型中
type User struct 
  gorm.Model
  Name string


// 声明 gorm.Model 模型
type User struct 
  ID   int
  Name string

gorm 默认使用ID作为主键名:

type User struct 
  ID   string // 字段名 `ID` 将被作为默认的主键名


// 设置字段 `AnimalID` 为默认主键
type Animal struct 
  AnimalID int64 `gorm:"primary_key"`
  Name     string
  Age      int64

指定表名:

// 用 `User` 结构体创建 `delete_users` 表
db.Table("deleted_users").CreateTable(&User)

var deleted_users []User
db.Table("deleted_users").Find(&deleted_users)
 SELECT * FROM deleted_users;

db.Table("deleted_users").Where("name = ?", "jinzhu").Delete()
 DELETE FROM deleted_users WHERE name = 'jinzhu';

修改表名:

可以通过定义 DefaultTableNameHandler 字段来对表名使用任何规则。

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

时间戳跟踪:

对于有 CreatedAt 字段的模型,它将被设置为首次创建记录的当前时间。

对于有 UpdatedAt 字段的模型,它将被设置为记录更新时的当前时间。

db.Create(&user) // 将设置 `CreatedAt` 为当前时间
// 你可以使用 `Update` 方法来更改默认时间
db.Model(&user).Update("CreatedAt", time.Now())

db.Save(&user) // 将设置 `UpdatedAt` 为当前时间
db.Model(&user).Update("name", "jinzhu") // 将设置 `UpdatedAt` 为当前时间

自动迁移:

判断UserInfo 信息是否发送改变,若变化则自动迁移,即生成新的列,若没此表则创建此表。

db.AutoMigrate(&UserInfo)

golang中orm或gorm或json序列化结构体时零值的处理(代码片段)

golang中平常写orm的结构体时,可以通过工具快速生成数据表的映射结构体http://sql2struct.atotoa.com/生成的结构体或者自己写的结构体大概是这样子的typeDianpu1struct Idint`orm:"id"json:"id"`//自增主键 UserNamestring`orm:... 查看详情

golang中orm或gorm或json序列化结构体时零值的处理(代码片段)

golang中平常写orm的结构体时,可以通过工具快速生成数据表的映射结构体http://sql2struct.atotoa.com/生成的结构体或者自己写的结构体大概是这样子的typeDianpu1struct Idint`orm:"id"json:"id"`//自增主键 UserNamestring`orm:... 查看详情

从java到go搭建go的orm框架gorm(代码片段)

...返回,则安装成功;如果报异常,则重新安装golanggoversiongo1.19.1darwin/arm642、安装Gorm在你的golang工程目 查看详情

gorm框架学习--入门(代码片段)

Gorm框架学习--入门引言快速入门模型定义约定gorm.Model高级选项字段级权限控制创建/更新时间追踪(纳秒、毫秒、秒、Time)嵌入结构体字段标签关联标签连接到数据库MySQL自定义驱动现有的数据库连接其他连接池参考引言... 查看详情

学习笔记golang之gorm学习笔记(代码片段)

一、模型定义1.模型定义模型是标准的struct,由Go的基本数据类型、实现了Scanner和Valuer接口的自定义类型及其指针或别名组成,如:typeUserstructIDuintNamestringEmail*stringAgeuint8Birthday*time.TimeMemberNumbersql.NullStringActivedAtsql 查看详情

golang修仙记之gorm(代码片段)

学习了如何连接数据库、简单的错误处理、关闭数据库、创建表、创建表中的一条记录、读取表的记录、更新表的记录、删除标的记录packagemainimport("github.com/jinzhu/gorm"_"github.com/jinzhu/gorm/dialects/mysql""time")typeUserstructgorm.ModelNamestring... 查看详情

从java到go搭建go的orm框架gorm(代码片段)

...返回,则安装成功;如果报异常,则重新安装golanggoversiongo1.19.1darwin/arm642、安装Gorm在你的golang工程目录下,执行如下命令安装grom:goget-ugorm.io/gorm3、安装对应数据库的驱动根据你的数据库,在任意目录执... 查看详情

从java到go搭建go的orm框架gorm(代码片段)

【提问】如何使用Goland软件,搭建一个ORM框架GORM?【解答】具体步骤如下:1、检查Go的安装在任意目录执行如下命令:goversion若有如下返回,则安装成功;如果报异常,则重新安装golanggoversiongo1.19.1darw... 查看详情

012-goorm框架之gorm测试(代码片段)

1:参考:https://github.com/jinzhu/gorm2:数据库脚本(pg)--createtableposts(idserialprimarykey,contenttext,authorvarchar(100),create_timetimestamptz);createtablecomments(idserialprimarykey,contenttext,authorvarc 查看详情

gorm框架学习---crud接口之创建(代码片段)

Gorm框架学习---CRUD接口之创建环境准备创建创建记录用指定的字段创建记录批量插入创建钩子根据Map创建使用SQL表达式、ContextValuer创建记录高级选项关联创建默认值本文内容摘抄自Gorm2022-8月份官方文档教程,如果Gorm框架后... 查看详情

gorm框架学习---crud接口之查询(代码片段)

Gorm框架学习---CRUD接口之查询环境搭建检索单个对象用主键检索检索全部对象条件String条件Struct&Map条件指定结构体查询字段内联条件Not条件Or条件选择特定字段OrderLimit&OffsetGroupBy&HavingDistinctJoinsJoins预加载join派生表(Derived... 查看详情

初学go入门-案例-教程-记录(13)orm框架gorm简单案例-连接sqlserver,并查询数据(代码片段)

初学go入门-案例-教程-记录(13)orm框架Gorm简单案例-连接sqlserver,并查询数据初安装依赖代码:结果附表结构表结构图表结构代码初希望能写一些简单的教程和案例分享给需要的人欢迎进qq群交流:546496965怎么... 查看详情

golanggorm快速开始保存查询单条数据查询全部数据(代码片段)

阅读目录概览1.概览2.安装mysql、gorm、gin包快速开始1.创建项目目录2、新建数据库表3、创建目录及文件3.1、E:\\gormlearn\\gormtest\\main.go3.2、E:\\gormlearn\\gormtest\\router\\router.go3.3、E:\\gormlearn\\gormtest\\api\\router.go3.4、E:\\gormlearn\\gormtest\\api\... 查看详情

go语言学习之旅--gorm(代码片段)

...介安装gorm声明模型模型定义约定gorm.Modelgorm连接到数据库快速入门gorm的增删查改增gorm创建记录用指定的字段创建记录批量插入查检索单个对象用主键检索检索全部对象String条件Struct&Map条件更新更新单个列更新多列更新选定... 查看详情

golang基础-postgresql-orm框架github.com/go-pg/pg学习五(实战)(代码片段)

文章目录接口介绍接口代码golang基础-Postgresql-ORM框架github.com/go-pg/pg学习一(连接数据库、创建、删除表)golang基础-Postgresql-ORM框架github.com/go-pg/pg学习二(增删改)golang基础-Postgresql-ORM框架github.com/go-pg/pg学习三(QueryOne、Query、Select用法... 查看详情

性能监控之golang应用接入prometheus监控(代码片段)

...、应用层面指标五、总结一、前言Prometheus提供了官方版Golang库用于采集并暴露监控数据,本文快速为你介绍如何使用官方版Golang库来暴露Golangruntime相关的数据,以及其它一些基本简单的示例,并使用Prometheus监控服务... 查看详情

gormcrud5分钟快速上手(代码片段)

文章目录1.ORM是什么2.GORM是什么3.安装4.连接DB5.创建数据表6.增加(Create)7.查询(Read)8.更新(Update)9.删除(Delete)10.小结参考文献1.ORM是什么ORM(ObjectRelationalMapping)& 查看详情

django框架之orm的相关操作(代码片段)

一、一般操作fromdjango.dbimportmodelsimportdatetime#Createyourmodelshere.classAuthor(models.Model):id=models.AutoField(primary_key=True)name=models.CharField(max_length=20)#以下是测试字段numtest=models.IntegerFiel 查看详情