gorm学习使用 | 青训营

95 阅读2分钟

前言:

gorm学习,结合了老师上课的内容和文档,然后用chatgpt来辅助使用,最终实现了实际的使用。需要强调的是,这里只是介绍了部分简单的内容,而没有什么分长高端的操作,仅仅是实现简单的增删改查。

gorm学习

一、连接数据库——以MySQL为例

根据gorm.io的文档,连接MySQL数据库的代码如下

import (
  "gorm.io/driver/mysql"
  "gorm.io/gorm"
)

func main() {
  dsn := "user:pass@tcp(127.0.0.1:3306)/dbname?charset=utf8mb4&parseTime=True&loc=Local"
  db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})
}

更多的细节可以参考 github.com/go-sql-driv…
@tcp()括号里面跟的是IP地址和端口号,就我们这个项目而言,就是根据服务器的填入即可。其他的直接照搬就好了,当要调用该数据库连接就用最后一行得到的 “db” 对象。 要连接其他的数据库则可以参考官方说明,然后照搬使用。

二、SQL的常规操作的实现:

create

1、根据已经有的数据的指针来创建

user := User{Name: "xbt", Age: 20}
//users = []User{{Name: "xxx"}, {Name: "yyy"}, {Name: "zzz"}}//用在第二点上
result := db.Create(&user) 

注意,这里的返回值result有两个属性,一个是result.Error,一个是result.RowsAffected。通过第一个,我们可以知道此次操作是否成功,作为判断依据和执行依据。第二个数据则是返回值条数,通过这个可以实现例如筛选的遍历等等。
2、实现批量创建:
简单的把user换成users数组,然后按相同的操作进行。这里就可以有效的利用RowsAffected了

delete

删除的基本语法:

db.Delete(&user)//等价于delete from user where id = 1;(假设为1)

//带条件删除
db.Where("name=?","xbt").Delete(&user)
//等价于delete from user where name=xbt and id =1;

总结了两个个注意点:

  1. 删除的的时候,也是引用类型;
  2. 首字母大写
  3. 删除的时候,删除的对象是需要指明主键的,不然就会批量删除。例如我这里的user用的是id,自增id作为主键,就不会触发这个问题。这估计也就是为什么都劝我们把主键设置为自增的无关的原因吧。

前两条不仅是Create,Delete,其他的也是这样 时间原因,其他的操作和具体的应用注意点就留到明天再写了。