Gorm入门 | 青训营笔记

89 阅读3分钟

这是我参加「第五届青训营 」伴学笔记创作活动的第 6 天。今天主要学习的是Gorm的基本用法。

重点内容

  1. Gorm连接数据库的基本方法
  2. Grom对数据库进行增删查改的基本操作

主要知识点

一、Gorm连接数据库

在Go中,我们往往是直接利用第三方库中的数据库驱动连接数据库(go-sql-driver),而Gorm直接将这一步封装起来,编写时只需调用其声明的函数即可,具体写法如下

db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})

其中db为数据库指针,dsn即DataSourceName,包含了数据库连接的基本参数。其格式一般为

dsn = username:password@tcp(host:port)/dbname?charset=utf8&parseTime=True&loc=Local

二、Gorm对数据库的增删查改

gorm model

在具体介绍数据库基本操作前,首先需要了解Gorm model。Gorm model是自定义的一个结构体,在Gorm中每个model都会对应数据库中的一张表,而Gorm正是以model为媒介实现对数据库的操作,下面举个例子说明model与表的对应关系,首先我们定义一个model

type User_name struct {
UserName     string       `grom:"username"`
UserPwd      string       `grom:"password"`
}

这个model对应了表user_names,表的结构如下

List user_names(
    username varchar(32),
    password varchar(32)
)

以上数据库表结构可能不大严谨,但大致意思是差不多的。默认情况下Gorm会将model与其名称复数形式的表关联起来,在实际的操作中我们可以用db.table("table name")指定需要操作的表。另外,我们可以通过对grom标签的更改实现如主键(grom:"primarykey"),默认值(gorm:"default: ... ")。

创建数据

Gorm可以通过函数db.Create()创建数据并插入对应的表中,以上面的例子为例,我们希望插入数据{"temp","pass"},那么我们可以输入以下代码

user := &User_name{UserName:"temp",UserPwd:"pass"}
db.Create(user)

此时对应表中中就会插入我们想要插入的数据。

查询数据

在查询数据部分,Gorm提供了多种查询方式:

  1. 单值查询:db.Take(listname),db.First(listname),db.last(listname),其中First指查询主键正序排列的第一条记录,Last查询逐渐倒序排列的第一条记录
  2. 多值查询:db.Find(listname)
  3. 条件查询:db.select(字段名),类似sql语言中的select子句,返回指定字段。db.where(条件),类似sql语言中的where子句,返回满足条件的表项

由于Gorm涉及到的查询方式较多,这里只举一个查询指定用户密码的例子:

db.Table("user_login").Select("UserPwd").Where("UserName = ?", UserName).Find(&pwd)

用自然语言表达,上面的代码的意思是查找user_login表中UserName为变量UserName表项的Userpwd字段,同时字段被存储在pwd变量中。

更新数据

Gorm提供了类似sql子句update的函数db.update()实现数据更新。例如

db.Model(&food).Update("price", 25)

这段语句等价于UPDATE foods SET price = 25 WHERE foods.id = '2',指把id为2的食物的价格更新为25。另外,当我们使用Struct更新时只会更新非零值,若要更新零值需要使用map

删除数据

Gorm中可以通过db.Delete()与db.DeleteAt()删除表项。这两种方法是有区别的:前者是物理层面作删除,即将数据从数据库中清除;后者则是软删除,即数据依然存在于数据库中,但Gorm无法查询。

事务与Hook

Gorm提供了Tansaction方法用于自动提交事务,该方法可以有效避免用户漏写Commit等造成bug。同时Gorm提供了CURD的Hook能力以检测是否出错,若出错Gorm会自动终止执行并回滚事务。

总结

今天主要学习的Gorm的基本知识以及其对数据库的基本操作。在工程项目中提升数据库运行的效率对提升整个项目的效率,降低运维成本十分重要,因此要充分掌握,利用Gorm的特性,提升项目数据库的运行质量。

引用参考

www.cnblogs.com/infodriven/…