GORM

1. 安装

go get -u github.com/jinzhu/gorm

要连接数据库首先要导入驱动程序

// GORM已经包装了一些驱动
import _ "github.com/jinzhu/gorm/dialects/mysql"
// import _ "github.com/jinzhu/gorm/dialects/postgres"
// import _ "github.com/jinzhu/gorm/dialects/sqlite"
// import _ "github.com/jinzhu/gorm/dialects/mssql"

2. 数据库连接

// 数据库连接
func main() {
// 1. MySQL
// 为了处理time.Time,需要parseTime为True
db1, err := gorm.Open("mysql", "user:password@(host:port)/dbname?charset=utf8&parseTime=True&loc=Local")
defer db1.Close()
if err != nil {
log.Fatal(err)
} // 2. PostgreSQL
db2, err := gorm.Open("postgres", "host=myhost user=gorm dbname=gorm sslmodel=disable password=password")
defer db2.Close() // 3. Sqlite3
db3, err := gorm.Open("sqlite3", "/tmp/gorm.db")
defer db3.Close()
}

GORM正式支持上述的数据库,如果您使用的是不受支持的数据库请按照本链接中的要求编写对应数据库支持文件。

3. 数据库迁移及表操作

// 数据库迁移
func main() {
// 1. 自动迁移
// 自动迁移仅仅会创建表,缺少列和索引,并且不会改变现有列的类型或删除未使用的列以保护数据。
db, err := gorm.Open("mysql", "user:password@(host:port)/dbname?charset=utf8&parseTime=True&loc=Local")
defer db.Close()
if err != nil {
log.Fatal(err)
}
db.AutoMigrate(&User{}) //db.AutoMigrate(&User{}, &Product{}, &Order{}) // 创建表时添加表后缀
//db.Set("gorm:table_options", "ENGINE=InnoDB").AutoMigrate(&User{}) // 2. 检查表是否存在
// 2.1 检查模型`User`是否存在
db.HasTable(&User{}) // 2.2 检查表`user`是否存在
db.HasTable("user") // 3. 创建表
// 3.1 为模型`User`创建表
db.CreateTable(&User{}) // 3.2 创建表时将"ENGINE=InnoDB"附加到SQL语句
db.Set("gorm:table_options", "ENGINE=InnoDB").CreateTable(&User{}) // 4. 删除表
// 4.1 删除模型`User`的表
db.DropTable(&User{})
// 4.2 删除表user
db.DropTable("user")
// 4.3 删除删除模型`User`的表和表`products`
db.DropTable(&User{}, "products") // 5. 修改列
// 修改模型`User`的description列的数据类型为`text`
db.Model(&User{}).ModifyColumn("description", "text") // 6. 删除列
// 删除模型`User·的description列
db.Model(&User{}).DropColumn("description") // 7. 添加外键
// 添加主键
// 1st param : 外键字段
// 2nd param : 外键表(字段)
// 3rd param : ONDELETE
// 4th param : ONUPDATE
db.Model(&User{}).AddForeignKey("city_id", "cities(id)", "RESTRICT", "RESTRICT") // 8. 索引
// 8.1 为`name`列添加索引`idx_user_anme`
db.Model(&User{}).AddIndex("idx_user_name", "name") // 8.2 为`name`,`age`列添加索引`idx_user_name_age`
db.Model(&User{}).AddIndex("idx_user_name_age", "name", "age") // 8.3 添加唯一索引
db.Model(&User{}).AddUniqueIndex("idx_user_name", "name") // 8.4 为多列添加唯一索引
db.Model(&User{}).AddUniqueIndex("idx_user_name_age", "name", "age") // 8.5 删除索引
db.Model(&User{}).RemoveIndex("idx_user_name")
}

GORM基本使用的更多相关文章

  1. Grails 对象关联映射 (GORM) 一

    转自:http://justjavac.iteye.com/blog/701445 Domain 类是任何商业应用的核心. 他们保存事务处理的状态,也处理预期的行为. 他们通过关联联系在一起, one ...

  2. gorm的日志模块源码解析

    gorm的日志模块源码解析 如何让gorm的日志按照我的格式进行输出 这个问题是<如何为gorm日志加traceId>之后,一个群里的朋友问我的.如何让gorm的sql日志不打印到控制台, ...

  3. 使用go, gin, gorm编写一个简单的curd的api接口

    go 是一门非常灵活的语言,既具有静态语言的高性能,又有动态语言的开发速度快的优点,语法也比较简单,下面是通过简单的代码实现了一个简单的增删改查 api 接口 hello world 常规版 新建 d ...

  4. go语言数据库操作, gorm框架

    type User struct{ ID uint `gorm:"primary_key"` Name string Age int Birthday time.Time AddT ...

  5. Tips on GORM, Avoid Error about "duplicate column name: id"

    The GORM is an super easy ORM solution for Go language. But many people would get the error about du ...

  6. Go项目中beego的orm使用和gorm的使用

    按照beego官方文档练习ORM的使用,model创建完始终没找到办法创建表,于是使用gorm翻译文档和官方文档进行了练习,使用起来还是比较简单. 安装: 方法一:Terminal打开,go get ...

  7. Gorm使用详解

    1.什么是Gorm go语言编写的orm框架 特点: 1)全功能ORM 2)关联(包含一个,包含多个,属于,多对多) 3)Callbacks(创建/保存/更新/删除/查找前后回调) 4)预加载 5)事 ...

  8. GORM 中文文档

    由于篇幅问题,本文只是快速开始部分,下面是完整地址. 中文文档地址:http://gorm.book.jasperxu.com/ 中文文档项目地址:https://github.com/jasperx ...

  9. 012-Go ORM框架之Gorm测试

    1:参考:https://github.com/jinzhu/gorm 2:数据库脚本(pg) -- create table posts( id serial primary key, conten ...

  10. gorm中数据库datetime类型的映射和time.Time的格式化

    如果在结构体中设置time变量的类型是time.Time,那么gorm取出来的时间格式将会是”2006-01-02 15:04:05.999999999 -0700 MST“东八区时间,在time.T ...

随机推荐

  1. 设计AOV网拓扑排序的算法

    拓扑排序 对一个有向图构造拓扑序列的过程称为拓扑排序(不唯一) 思想 从AOV网选择一个没有前驱的顶点并输出 从AOV网中删去该顶点,并且删去所有以该顶点为尾的弧 重复上述两步,直到全部顶点都被输出, ...

  2. hdu 2191 珍惜现在,感恩生活(多重背包)

    题意: 有N元经费,M种大米,每种大米有单袋价格p元,单袋重量h,以及对应袋数c. 问最多可以买多重的大米. 思路: 经典多重背包,用二进制的方法. 看代码 代码: struct node{ int ...

  3. 动手个性化设置自己的 IntelliJ IDEA

    前言 IDEA 是一个智能开发工具,每个开发者的使用习惯不同,如何个性化自己的IDEA? 我们可以通过 Settings 功能来设置. Settings文件是 IDEA 的配置文件,通过它可以设置主题 ...

  4. 【数据结构&算法】05-线性表之数组

    目录 前言 线性结构与非线性结构 数组 数组的两个限制 数组的随机访问特性 数组的操作 插入操作 删除操作 数组越界 容器 数组下标 前言 本笔记主要记录数组的一些基础特性及操作. 顺便解答下为什么大 ...

  5. linux下c语言实现简单----线程池

    这两天刚好看完linux&c这本书的进程线程部分,学长建议可以用c语言实现一个简单的线程池,也是对线程知识的一个回顾与应用.线程的优点有好多,它是"轻量级的进程",所需资源 ...

  6. 攻防世界 Misc 新手练习区 give_you_flag Writeup

    攻防世界 Misc 新手练习区 give_you_flag Writeup 题目介绍 题目考点 gif图片分离 细心的P图 二维码解码 Writeup 下载附件打开,发现是一张gif图片,打开看了一下 ...

  7. celery config

    /* Useful celery config. app = Celery('tasks', broker='redis://localhost:6379', backend='redis://loc ...

  8. 美化CMD

    配置 Windows Terminal 的步骤 前提:在微软商店下载两个软件 Windows Terminal PowerShell(因为最好使用 PowerShell7 ,否则以下命令可能执行不了) ...

  9. [Comet1790]Ternary String Counting

    令$f_{i,j,k}$表示前$i$个位置,三种字符最后一次出现的位置为$i,j$和$k$(保证$k<j<i$)的方案数 考虑转移(递推),即分为两步-- 1.填写第$i$个字符,即从$f ...

  10. [bzoj3123]森林

    首先对于询问操作可以使用可持久化线段树来维护,对于连边操作对于两颗树中选取较小的树暴力练到另一个点上,点数可以用并查集然后只修改根的点数即可. 1 #include<bits/stdc++.h& ...