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)