zoukankan      html  css  js  c++  java
  • go学习-gorm

    1安装

    安装gorm
    go get github.com/jinzhu/gorm
    安装mysql
    go get github.com/jinzhu/gorm/dialects/mysql

    2模型定义

    模型是标准的 struct,由 Go 的基本数据类型、实现了 Scanner 和 Valuer 接口的自定义类型及其指针或别名组成
    由于grom是使用的orm映射,所以需要定义要操作的表的model,在go中需要定义一个struct
    GORM 倾向于约定,而不是配置。默认情况下,GORM 使用 ID 作为主键,使用结构体名的 蛇形复数 作为表名,字段名的 蛇形 作为列名,并使用 CreatedAt、UpdatedAt 字段追踪创建、更新时间
    模型和数据的对应关系:

    sql go
    数据表 结构体
    数据行 结构体实例
    字段 结构体自段
    字段标签

    声明 model 时,tag 是可选的,GORM 支持以下 tag: tag 名大小写不敏感,但建议使用 camelCase 风格

    标签名 说明
    column 指定 db 列名
    type 列数据类型,推荐使用兼容性好的通用类型,例如:所有数据库都支持 bool、int、uint、float、string、time、bytes 并且可以和其他标签一起使用,例如:not null、size, autoIncrement… 像 varbinary(8) 这样指定数据库数据类型也是支持的。在使用指定数据库数据类型时,它需要是完整的数据库数据类型,如:MEDIUMINT UNSIGNED not NULL AUTO_INCREMENT
    size 指定列大小,例如:size:256
    primaryKey 指定列为主键
    unique 指定列为唯一
    default 指定列的默认值
    precision 指定列的精度
    scale 指定列大小
    not null 指定列为 NOT NULL
    autoIncrement 指定列为自动增长
    autoIncrementIncrement 自动步长,控制连续记录之间的间隔
    embedded 嵌套字段
    embeddedPrefix 嵌入字段的列名前缀
    autoCreateTime 创建时追踪当前时间,对于 int 字段,它会追踪秒级时间戳,您可以使用 nano/milli 来追踪纳秒、毫秒时间戳,例如:autoCreateTime:nano
    autoUpdateTime 创建/更新时追踪当前时间,对于 int 字段,它会追踪秒级时间戳,您可以使用 nano/milli 来追踪纳秒、毫秒时间戳,例如:autoUpdateTime:milli
    index 根据参数创建索引,多个字段使用相同的名称则创建复合索引,查看 索引 获取详情
    uniqueIndex 与 index 相同,但创建的是唯一索引
    check 创建检查约束,例如 check:age > 13,查看 约束 获取详情
    <- 设置字段写入的权限, <-:create 只创建、<-:update 只更新、<-:false 无写入权限、<- 创建和更新权限
    -> 设置字段读的权限,->:false 无读权限
    - 忽略该字段,- 无读写权限
    comment 迁移时为字段添加注释

    3.连接mysql数据库

    db,err := gorm.Open("mysql", "root:root1234@(localhost:3306)/myfirstdb?charset=utf8&parseTime=True&loc=Local")
    defer db.Close()
    

    4.创建表

    //创建表
    db.AutoMigrate(&UserInfo{})
    //创建数据行
    u1 := UserInfo{1, "用户1", "18", "123@163.com"}
    db.Create(&u1)
    

    执行结果:数据库创建一张名为user_infos的新表,并插入一条数据。新表名是根据struct的名字,将多个单词用“_”连接,最后加上s组成。

    5.查询表

    //查询
    	var u UserInfo
    	db.First(&u)
    	fmt.Printf("u:%#v
    ", u)
    

    6.更新表

    //更新上面查询出来的那条数据
    	db.Model(&u).Update("age", "20")
    

    7.删除

    //删除上面查询出来的数据
    	db.Delete(&u)
    

    完整代码

    package main
    
    import (
    	"fmt"
    
    	"github.com/jinzhu/gorm"
    	_ "github.com/jinzhu/gorm/dialects/mysql"
    )
    
    type UserInfo struct {
    	ID    uint
    	Name  string
    	Age   string
    	Email string
    }
    
    func main() {
    	db, _ := gorm.Open("mysql", "root:root1234@(localhost:3306)/myfirstdb?charset=utf8&parseTime=True&loc=Local")
    	defer db.Close()
    	//创建表
    	db.AutoMigrate(&UserInfo{})
    	//创建数据行
    	u1 := UserInfo{1, "用户1", "18", "123@163.com"}
    	db.Create(&u1)
    	//查询表中第一条数据保存到u
    	var u UserInfo
    	db.First(&u)
    	fmt.Printf("u:%#v
    ", u)
    	//更新上面查询出来的数据
    	db.Model(&u).Update("age", "20")
    	//删除上面查询出来的数据
    	db.Delete(&u)
    }
    
    所有博客均为自己学习的笔记。如有错误敬请理解。
  • 相关阅读:
    【DOS命令】type
    【shell】$符号操作
    【C++百科】STL(Standard Template Library) 标准模板库简介
    【配置与安装】SSH 密钥类型的的选择(RSA, DSA or Other)
    【百科通识】CPU x86/x86-64/x64/i386
    【配置与安装】SSH远程开发
    【百科通识】.bat文件
    【vi】模式切换
    【vim】撤销与回退
    【C++】智能指针
  • 原文地址:https://www.cnblogs.com/tangtang-benben/p/15236091.html
Copyright © 2011-2022 走看看