gorm快速入门|青训营

93 阅读3分钟

gorm使用

建立连接

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

gorm建表

gorm.Model ///内置表格式
db.AutoMigrate(&Students{})//建立student表

增删改查

db.Creat()
db.Find()查 ,未加条件则查出整个表
db.first()查询
查询语句 db.where().find()
db.Where("id=?", 1).First(&Students{}).Update("name", "yaohuan”)//修改当条数据

///修改多条数据
若采用map[string].interface()则空数据也会被修改

db.Where("id=?", 1).First(&Students{}).Updates(Students{
		Name: "hufuren",
		Nub:  5201314,
		Age:  22,
		Sex:  "wuman",
	})

一些细节

first与find

在 GORM 中,Find() 和 First() 都是查询数据库记录的方法,但它们之间有一些区别。下面是它们的具体区别: Find() 方法用于查询满足条件的所有记录。 当使用 Find() 方法时,GORM 会执行一个查询语句,返回查询结果并将其填充到指定的切片或结构体的切片中。如果没有找到满足条件的记录,则返回一个空的切片。Find() 方法返回的结果是一个切片,可以包含多条记录。 First() 方法用于查询满足条件的第一条记录。 当使用 First() 方法时,GORM 会执行一个查询语句,并将查询结果的第一条记录填充到指定的结构体实例中。如果没有找到满足条件的记录,则返回一个空的结构体实例。 First() 方法返回的结果是一个结构体实例。 结来说,Find() 方法返回满足条件的多个记录的切片,而 First() 方法返回满足条件的第一条记录的单个结构体实例。

modle(&struct or struct)

在使用Model()方法时,可以选择传递&like{}或like{}作为参数,具体选择取决于你的需求和代码组织风格。Model()方法需要接收一个模型对象作为参数,用于指定要操作的数据库表对应的模型结构体。常见的两种用法如下:

Model(&like{}) 在这种用法中,通过传递一个指向like{}结构体的指针&like{},明确指定了要操作的模型。这样做可以确保在后续的操作中使用的是正确的模型对象,并且对应的表名、字段等信息可以从这个指定的模型中获取。

Model(like{}) 这种用法中,直接传递了一个like{}结构体。这种方式会使用默认的模型定义和标签来确定数据库表、字段等信息。如果你的模型定义和标签与数据库表一致,或者不需要在模型中使用标签来映射数据库表和字段,那么可以选择这种简便的方式。 因此,对于选择&like{}还是like{}作为参数,你需要根据自己的实际需求来决定。如果你需要在模型中使用标签映射数据库表和字段,或者需要确保在操作中使用的是正确的模型对象,那么选择&like{}传递指针更合适。如果你的模型定义和标签与数据库表一致,并且不需要自定义的映射规则,那么可以选择直接传递like{}。更加推荐指针,因为不会报各种奇怪的错误

结构体查询时int类型的0值问题

当进行整个结构体查询时 gorm会默认把没有设置的值为0 所以无法进行查询 gorm只能进行非零字段查询。(不推荐结构体查询)目前的解决方法是: 当要进行结构体查询时将结构体中的int改为指针int类型。更加推荐的是使用where加find的方式。