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. Spring Cloud Gateway + Jwt + Oauth2 实现网关的鉴权操作

    Spring Cloud Gateway + Jwt + Oauth2 实现网关的鉴权操作 一.背景 二.需求 三.前置条件 四.项目结构 五.网关层代码的编写 1.引入jar包 2.自定义授权管理器 ...

  2. GitHub Universe 2021|MS Reactor 邀你共聚年度盛会

    GitHub Universe 2021 将于2021年10月27-28日(PDT)在线直播,MS Reactor 将与 CSDN 合作进行转播,与你一同观看这场全球开发者盛会. 关于 GitHub ...

  3. 脚本:bat实现自动转换windows远程端口

    问题描述:通过一个脚本可以实现windows远程端口的转换,这个是拷贝过来学习的一个脚本 @echo off color f0 echo 修改远程桌面3389端口(支持Windows 2003 200 ...

  4. 多边形——————区间dp

    原题链接:https://www.acwing.com/problem/content/285/ 题意简单来说就是:给你一个环,断掉一条边使其成为一个链,用这个链跑dp,求最大得分. 首先这不是一道板 ...

  5. boost编译中的细节问题

    原文链接 http://www.cppblog.com/Robertxiao/archive/2013/01/06/197022.html 生成文件命名规则:boost中有许多库,有的库需要编译.而有 ...

  6. 用C++实现的数独解题程序 SudokuSolver 2.6 的新功能及相关分析

    SudokuSolver 2.6 的新功能及相关分析 SudokuSolver 2.6 的命令清单如下: H:\Read\num\Release>sudoku.exe Order please: ...

  7. 从0到1使用Kubernetes系列(五):Kubernetes Scheduling

    前述文章介绍了Kubernetes基本介绍,搭建Kubernetes集群所需要的工具,如何安装,如何搭建应用.本篇介绍怎么使用Kubernetes进行资源调度. Kubernetes作为一个容器编排调 ...

  8. 链式A+B 牛客网 程序员面试金典 C++ Python

    链式A+B 牛客网 程序员面试金典 C++ Python 题目描述 有两个用链表表示的整数,每个结点包含一个数位.这些数位是反向存放的,也就是个位排在链表的首部.编写函数对这两个整数求和,并用链表形式 ...

  9. CVAT 用户指南

    用户指南 计算机视觉标注工具(CVAT)是基于 Web 为计算机视觉算法标注视频和图像的在线工具. 它的灵感来自Vatic免费的.在线的.交互式的视频注释工具. CVAT有许多强大的功能: 在关键帧之 ...

  10. mysql8版本以上重置密码

    1.打开命令窗口cmd,输入命令:net stop mysql,停止MySQL服务, 2.开启跳过密码验证登录的MySQL服务, 输入命令 : mysqld --console --skip-gran ...