前言:
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;
总结了两个个注意点:
- 删除的的时候,也是引用类型;
- 首字母大写
- 删除的时候,删除的对象是需要指明主键的,不然就会批量删除。例如我这里的user用的是id,自增id作为主键,就不会触发这个问题。这估计也就是为什么都劝我们把主键设置为自增的无关的原因吧。
前两条不仅是Create,Delete,其他的也是这样 时间原因,其他的操作和具体的应用注意点就留到明天再写了。