专栏首页Golang语言开发栈Go语言ORM-gorm学习笔记(一)

Go语言ORM-gorm学习笔记(一)

安装

go get github.com/jinzhu/gorm

连接数据库

导入数据库驱动

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

MySQL连接

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

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

模型定义

模型(Models)通常只是正常的golang structs、基本的go类型或它们的指针。同时也支持sql.Scanner及driver.Valuer接口(interfaces)。

模型(Model)示例:

type User struct { // 表名默认使用结构体名称的复数 users
  gorm.Model // 嵌入gorm.Model gorm.Model 是一个包含了ID,CreatedAt,UpdatedAt,DeletedAt四个字段的go结构体
  Name string `gorm:"column:username;comment:'用户名'"` // 使用tag标记 column 定义字段的名称 使用tag标记 comment 定义字段注释
  Age sql.NullInt64 `gorm:"comment:'年龄'"`
  Birthday *time.Time `gorm:"comment:'生日'"`
  Email string `gorm:"comment:'邮箱';unique_index;type:varchar(100)"` // 使用tag标记 type 定义字段类型和索引 使用tag标记 unique_index 设置唯一索引
  Role string `gorm:"size:255;comment:'角色'"` // 使用tag标记 size 设置字段大小为255
  MemberNumber *string `gorm:"unique;not null;comment:'会员卡号'"` // 使用tag标记 unique 设置唯一 使用tag标记 not null 设置字段属性不为空
  Num int `gorm:"AUTO_INCREMENT;comment:'数量'"` // 使用tag标记 AUTO_INCREMENT 设置字段自增
  Addres string `gorm:"index:addr;comment:'地址'"` // 使用tag标记 index 设置索引名为addr的普通索引
  Ignore int `gorm:"-"` // 使用tag标记 - 忽略该字段
}

结构体标记(tags)

标记(tags)在声明模型时是可选项。

支持的结构体标记(Struct tags)

结构体标记(Tag)

描述

Column

指定列名

Type

指定列数据类型

Size

指定列大小,默认值255

PRIMARY_KEY

将列指定为主键

UNIQUE

将列指定为唯一

DEFAULT

指定列默认值

PRECISION

指定列精度

NOT NULL

将列指定为非NULL

AUTO_INCREMENT

指定列是否为自增类型

INDEX

创建具有或不带名称的索引,如果多个索引同名则创建复合索引

UNIQUE_INDEX

和INDEX类似,只不过创建的是唯一索引

EMBEDDED

将结构设置为嵌入

EMBEDDED_PREFIX

设置嵌入结构的前缀

-

忽略此字段

补充: COMMENT 字段注释

本文分享自微信公众号 - Go语言开发栈(golanghubcn),作者:frankphper

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-02-24

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Go语言ORM-gorm学习笔记(二)

    gorm.model是一个包含了ID,CreatedAt,UpdatedAt,DeletedAt四个字段的Golang结构体。你可以将它嵌入到你自己的模型中,当...

    frankphper
  • Gin 学习之自定义服务器配置信息

    Gin 框架通过调用 Default 函数,返回一个 *gin.Engine,然后调用 Run 方法构建一个服务器。

    frankphper
  • GORM V2 自动迁移和迁移接口的方法

    在项目开发中,我们可能会随时调整声明的模型,比如添加字段和索引,使用 GORM 的自动迁移功能,可以始终让我们的数据库表保持最新。此外,GORM 还提供了一些迁...

    frankphper
  • 主机安全(云镜)产品简介

    安全没有绝对的如何保护好企业的数据安全是摆在管理员面前的一道难题,根据个经历可以分以下两个方便来提升企业的安全等级。

    研究僧
  • Libra教程之:move语言的特点和例子

    Libra的目标是打造一个全球话的金融和货币的平台,从而赋能地球上的几十亿人。那么作为Libra的move语言就需要在安全性和可编程性上面提供大力的支持。

    程序那些事
  • JS函数式编程 - 函数组合与柯里化

    我们都知道单一职责原则,其实面向对象的SOLID中的S(SRP, Single responsibility principle)。在函数式当中每一个函数就是一...

    前端博客 : alili.tech
  • 干货 | 2019 Kaggle Freesound 音频标注挑战赛结果出炉,这是一份排名前 2 %的解决方案!

    AI 科技评论按:日前,2019 年 Kaggle Freesound 音频标注挑战赛宣告完结,比赛结果也终于出炉。参赛者之一 Eric BOUTEILLON ...

    AI科技评论
  • Go 内存管理 -- 垃圾回收

    go作为一个非常年轻的语言,吸取了各个语言的优点,比如说Java中优秀的垃圾回收,来释放程序员一部分精力。 本篇要说的就是垃圾回收,常见的垃圾回收算法有标记-...

    邹志全
  • 微软:将无条件、全面为美国军方提供云计算技术服务

    在谷歌、亚马逊员工联名上书,反对与美国军方合作的同时,微软却走了一条完全相反的路。

    镁客网
  • 前端|响应式开发之布局容器

    在前面学习了响应式布局原理,简单的了解了一下响应式布局许多功能及其原理,今天来学习一下响应式布局中的布局容器。

    算法与编程之美

扫码关注云+社区

领取腾讯云代金券