Gorm连接数据库的基本操作(实践)|青训营

132 阅读2分钟

GORM介绍

GORM是一种对象关系映射ORM框架。数据表对应结构体,数据行对应结构体实例,数据库字段对应结构体字段。在Gorm中,表名默认就是结构体名称的复数,也可以通过方法或者db.Table("表名")自定义表名;列名由两个单词组成,在数据库中默认转小写后用下划线链接;如果结构体有ID字段则默认ID字段为主键。另外,GORM内置了一个gorm.Model结构体。gorm.Model是一个包含了ID, CreatedAt, UpdatedAt, DeletedAt四个字段的Golang结构体,可以将其嵌入到自己的结构体中。(如果模型内置了gorm.model有DeletedAt字段,则调用Delete删除该记录时,将会设置DeletedAt字段为当前时间,而不是直接将记录从数据库中删除,即软删除。

Gorm的本地化配置

1、Gorm的安装

在控制台中输入以下代码:

go get -u github.com/go-gorm/gorm
复制代码

2、导入对应包

输入以下代码:

import "github.com/go-gorm/gorm"
复制代码

配置本地数据库

对应代码如下:

db, err := gorm.Open("mysql", "username:password@(127.0.0.1:3306)/ttms?charset=utf8mb4&parseTime=True&loc=Local")
	if err != nil {
		panic(err)
	}
	defer db.Close()
	//创建表,自动迁移,(把结构体和数据表进行对应)
	db.AutoMigrate(&User{})


复制代码

其中,db是 GORM 打开数据库连接后的数据库句柄,用于执行数据库操作;err用于捕获gorm.Open方法执行时可能出现的异常,gorm.open是Gorm提供的打开数据库连接的方法,mysql指的是使用的是MySQL数据库驱动,username指的是本地数据库用户名,password指的是本地数据库密码,charset指定字符集,parseTime用来自动解析时间类型。最后的AutoMigrate则实现了自动迁移。

3、创建实体模型

定义结构体User,其中包含了用于字段生成通用字段的gorm.Model,以及自定义字段Username,Sex,Email,Age,代码如下:

type User struct {
	gorm.Model
	Username string
	Sex    string
	Age      int
}
复制代码

4、SQL语句生成

自动迁移后,代码将根据我们的实体模型定义自动创建对应的 MySQL 表结构。以下是在MySQL数据库中生成User模型对应表结构的SQL语句:

CREATE TABLE users (
  id BIGINT NOT NULL AUTO_INCREMENT,
  created_at DATETIME,
  updated_at DATETIME,
  deleted_at DATETIME,
  username VARCHAR(255),
  Sex VARCHAR(255),
  Age INT,
  PRIMARY KEY (id)
);
复制代码

5、数据库基本操作

(1)增加:使用 GORM 提供的Create方法和Save方法来实现。代码如下:

users := []User{{Username: "tiansuo", Sex: "male", Age: 24},{Username: "chunping", Sex: "male", Age: 28},{Username: "shenzhi",  Sex: "male", Age: 25}}
db.Create(&users)
复制代码

(2)删除:使用Gorm提供的Delete方法来实现。代码如下:

var user User
db.First(&user)
db.Delete(&user)//普通删除
db.Where("age = ?", 25).Delete(&User{})//条件删除
复制代码

(3)修改:使用Gorm提供的Save或Update 方法来执行。代码如下:

var user User
db.First(&user)
user.Age = 24
db.Save(&user)//Save方法修改
db.Model(&User{}).Where("age < ?", 30).Update("age", 24)// Update方法修改
复制代码

(4)查询:使用 GORM 提供的查询方法Find和条件构造器来实现。代码如下:

db.Find(&users)//普通查询
var user User
db.Where("username = ?","tiansuo").First(&user)// 条件查询用户
// 多个条件的查询
var users []User
db.Where("age > ?", 24).Where("sex LIKE ?", "male").Find(&users)