gorm基本使用

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了gorm基本使用相关的知识,希望对你有一定的参考价值。

参考技术A

gorm安装

gorm框架是go的一个数据库连接及交互框架,一般用于连接关系型数据库。

安装gorm,使用命令安装:

go get -u -v github.com/jinzhu/gorm

连接数据库

构建连接的目标为数据库中某一个库,同大多数框架一样使用url进行连接,url基本格式:

用户名:密码@连接方式(ip:port)/数据库名?参数

参数描述:

用户名 :连接数据库用户名

密码 :连接数据库密码

连接方式 :或称为访问协议,一般为tcp

ip :数据库所在服务器地址

port :数据库监听端口

数据库名 :数据库中对应要连接库名

参数 :附加数据库参数,根据数据库不同内容不同


确定url后,就可以调用gorm中参数进行连接数据库操作:

别忘记import语句导入包:

操作完数据库后不要忘了关闭连接:

表操作

创建表

gorm创建表基于结构体,所以创建表前要先用结构体规划表结构,这里简单写一个结构体,创建表时默认结构体第一个字段作为主键:

写好结构体后,调用创建表语句直接按照结构体结构创建表:

当直接创建表时,表名遵循规范:

1、大写字母全部小写,所有位于中间的大写字母都变成小写字母并且前面加下划线,例如UserInfo结构体创建为表名称为user_infos。

2、上面最后的那个s是因为直接创建表时,名称最后都会加上一个s。所以上面结构体User创建表后名称为users。

删除表

增删改查

插入数据

插入数据,插入数据方法结构使用Create方法:

查询数据

查询第一条找到的数据,使用First,该方法返回值仍然为db对象,所以接收数据时我们需要先定义一个对应表结构的结构体接收数据:

有First就有Last,同First调用格式一致。

批量查询,批量查询使用Find方法,其余参数结构同First或Last相同,只不过传参时一般传入数组参数,当然,First或Last方法也可以传入数组参数,但得到的数组只有一个数据,批量查询操作:

更新数据

删除内容

GORM基本使用

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基本使用的主要内容,如果未能解决你的问题,请参考以下文章

GORM的简单使用

Gorilla Mux 和 GORM 失败

GORM 无法实现插件中的域类是 GORM 类

Go语言使用gorm对MySQL进行性能测试

如何使用 Gin 和 Gorm 搭建一个简单的 API 服务

Go GORM 有很多关系。如何将数据存储到MYSQL DB