本文的目标
本文力图实现用简短的篇幅,结合一些具体的应用场景来讲述gorm基本的增删查改功能。
Gorm介绍
在现代软件开发中,数据库操作是构建应用程序不可或缺的一部分。
GORM是Go语言的一个ORM(Object Relational Mapping)库。它可以让我们通过Go来操作数据库中的数据。其中ORM(Object Relational Mapping:对象关系映射)是一种程序技术,用于实现面向对象编程语言里不同类型系统的数据之间的转换。从效果上说,它其实是创建了一个可在编程语言里使用的“虚拟对象数据库”。其有如下特点:
-
全功能 ORM
-
关联 (Has One,Has Many,Belongs To,Many To Many,多态,单表继承)
-
Create,Save,Update,Delete,Find 中钩子方法
-
支持
Preload
、Joins
的预加载 -
事务,嵌套事务,Save Point,Rollback To Saved Point
-
Context,预编译模式,DryRun 模式
-
批量插入,FindInBatches,Find/Create with Map,使用 SQL 表达式、Context Valuer 进行 CRUD
-
SQL 构建器,Upsert,数据库锁,Optimizer/Index/Comment Hint,命名参数,子查询
-
复合主键,索引,约束
-
Auto Migration
-
自定义 Logger
-
灵活的可扩展插件 API:Database Resolver(多数据库,读写分离)、Prometheus…
-
每个特性都经过了测试的重重考验
-
开发者友好
快速引入
Gorm框架引入
go get -u gorm.io/gorm
定义模型结构
在做具体的增删查改之前,我们要根据自身的需求来定义结构体,以相应的结构体为依托。这里以UserInfo表为例:
type UserInfo struct {
Avatar string // 用户头像
BackgroundImage string // 用户个人页顶部大图
FavoriteCount int64 // 喜欢数
FollowCount int64 // 关注总数
FollowerCount int64 // 粉丝总数
ID int64 // 用户id
IsFollow bool // true-已关注,false-未关注
Name string // 用户名称
Signature string // 个人简介
TotalFavorited int64 // 获赞数量
WorkCount int64 // 作品数
}
数据库创建
在mysql中创建表,sql语句如下:
create table user_infos
(
avatar longtext null,
background_image longtext null,
favorite_count bigint null,
follow_count bigint null,
follower_count bigint null,
id bigint auto_increment
primary key,
name longtext null,
signature longtext null,
total_favorited bigint null,
work_count bigint null,
is_follow tinyint(1) null
);
同时,我们也可以使用gorm中的db.AutoMigrate(&User{})方法来实现数据库的自动创建。对结构体相关条目进行标记可以指定主键和自增等操作:
ID int64 `gorm:"primaryKey"`
// 用primaryKey标记主键
Mysql连接
Gorm连接
mysqlInfoString = fmt.Sprintf("%s:%s@%s(%s:%d)/%s?parseTime=true",
mysqlConf.Username, mysqlConf.Password, mysqlConf.Protocol, mysqlConf.Url, mysqlConf.Port,
mysqlConf.Dbname)
mysqlDb, err := sql.Open("mysql", mysqlInfoString)
GormDb, err := gorm.Open(mysql.Open(mysqlInfoString), &gorm.Config{})
// Username:数据库用户名 Password:数据库登录密码 Protocol:数据库协议(指明是哪种数据库)
// URL:数据库地址 Port:数据库端口 Dbname:具体要读取的数据库名称
CURD基本操作
- Create 新增记录
var userAccount = &TableEntity.UserAccountInfo{
UserID: userId,
Password: password,
Username: rUser.Username,
}
tx.Create(userAccount)
这里通过给相应的结构体进行赋值,再调用Create函数实现表项的创建
同时,我们还可以对数据库表项进行批量创建,只需创建相应的切片,步骤如下:
var users = []TableEntity.UserAccountInfo{
{
UserID: 1, Password: "25123",Username: "张三"
},
{ UserID: 2, Password: "12wqe", Username: "李四"
},
}
db.Create(&users)
- Where 记录查询
在mysql中语句中where语句是最为灵活与多样化的存在,通过指定相应的查询语句即可实现多样化的功能查询,举例如下:
mysqldb.Model(&TableEntity.UserAccountInfo{}).Where("username =?", username).Find(&num)
上述语句通过db.Model指定要查询的表项(通过grom指定创建相关表项的结构体),where方法中给出相关的查询语句,用Find方法来接受查询到的表项并转化为相应的结构体实例
- Delete 记录删除
负责指定主键删除mysql数据库中指定的表项,不指定主键就会触发批量删除,这点需要注意
mysqldb.Delete(&TableEntity.UserAccountInfo{}, 10)
其中TableEntity.UserAccountInfo{}是与数据库相对应的表项,10是主键的值
- Update 记录更新
更新数据库中相关记录
mysqldb.Model(&TableEntity.UserAccountInfo{}).Where("user_iD = ?", 30).Updates(TableEntity.UserAccountInfo{Password: "25123", Username: "王五"})
上述即通过指定了相应的条件对满足条件的表项进行了修改与更新
标签:Username,表项,数据库,TableEntity,查改,mysql,null,Gorm From: https://www.cnblogs.com/johnsonstar/p/17649945.html