当使用Go语言进行数据库操作时,GORM是一个常用的ORM(对象关系映射)库。它提供了方便的API来操作数据库,并且支持多种数据库引擎。以下是一个关于使用Go和GORM进行数据库操作的简要笔记:
-
安装和导入GORM:
- 使用
go get命令安装GORM:go get -u gorm.io/gorm - 导入GORM:
import "gorm.io/gorm"
- 使用
-
连接数据库:
-
使用GORM连接数据库,可以使用多种数据库引擎,如MySQL、PostgreSQL等。
-
示例代码:
import ( "gorm.io/driver/mysql" "gorm.io/gorm" ) func main() { dsn := "user:password@tcp(localhost:3306)/dbname?charset=utf8mb4&parseTime=True&loc=Local" db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{}) if err != nil { panic("Failed to connect to database") } // ... }
-
-
定义模型和表:
-
使用结构体定义模型,每个字段对应数据库表的列。
-
使用
gorm:"column:column_name"标记字段对应的数据库列名。 -
使用
gorm:"primaryKey"标记主键字段。 -
示例代码:
type User struct { ID uint `gorm:"primaryKey"` Name string `gorm:"column:name"` Age int `gorm:"column:age"` }
-
-
创建表和迁移:
-
使用
AutoMigrate方法创建表和迁移。 -
示例代码:
func main() { // ... err := db.AutoMigrate(&User{}) if err != nil { panic("Failed to migrate") } // ... }
-
-
插入数据:
-
使用
Create方法插入数据。 -
示例代码:
func main() { // ... user := User{Name: "John", Age: 25} result := db.Create(&user) if result.Error != nil { panic("Failed to insert data") } // ... }
-
-
查询数据:
-
使用
Find方法查询数据。 -
使用
Where方法添加查询条件。 -
示例代码:
func main() { // ... var users []User db.Where("age > ?", 18).Find(&users) // ... }
-
-
更新数据:
-
使用
Model方法指定要更新的模型。 -
使用
Updates方法更新数据。 -
示例代码:
func main() { // ... var user User db.Model(&user).Where("id = ?", 1).Updates(User{Name: "NewName"}) // ... }
-
-
删除数据:
-
使用
Delete方法删除数据。 -
示例代码:
func main() { // ... var user User db.Delete(&user, 1) // ... }
-
这只是一个关于使用Go和GORM进行数据库操作的简要笔记。GORM还提供了更多高级功能,如事务处理、关联关系、预加载等。 当使用GORM进行数据库操作时,可以使用其高级功能来处理事务、关联关系和预加载。以下是关于这些主题的简要笔记:
-
事务处理:
-
使用
Begin方法开始一个事务。 -
使用
Commit方法提交事务。 -
使用
Rollback方法回滚事务。 -
示例代码:
func main() { // ... tx := db.Begin() if tx.Error != nil { panic("Failed to start transaction") } // 在事务中执行数据库操作 // ... if err := tx.Commit().Error; err != nil { tx.Rollback() panic("Failed to commit transaction") } // ... }
-
-
关联关系:
-
使用结构体字段来定义模型之间的关联关系。
-
使用
gorm:"foreignKey:ForeignKeyColumn"标记外键列。 -
使用
gorm:"references:ReferencedModel(ReferencedColumn)"标记引用的模型和列。 -
示例代码:
type User struct { ID uint Name string Posts []Post `gorm:"foreignKey:UserID"` } type Post struct { ID uint UserID uint `gorm:"column:user_id"` Title string }
-
-
预加载:
-
使用
Preload方法预加载关联的数据。 -
使用
Find方法查询数据,并使用Preload方法指定要预加载的关联关系。 -
示例代码:
func main() { // ... var users []User db.Preload("Posts").Find(&users) // ... }
-
当使用GORM进行数据库操作时,可以使用查询条件、排序和分页来限制查询结果的数量和顺序。以下是关于这些主题的进一步笔记:
-
查询条件:
-
使用
Where方法添加查询条件。 -
使用
And方法添加多个查询条件。 -
使用
Or方法添加多个查询条件之间的逻辑或关系。 -
示例代码:
func main() { // ... var users []User db.Where("age > ?", 18).And("name LIKE ?", "%John%").Find(&users) // ... }
-
-
排序:
-
使用
Order方法指定排序字段和排序方向。 -
使用
Desc方法指定降序排序。 -
使用
Asc方法指定升序排序。 -
示例代码:
func main() { // ... var users []User db.Order("age desc").Find(&users) // ... }
-
-
分页:
-
使用
Limit方法限制查询结果的数量。 -
使用
Offset方法指定查询结果的偏移量。 -
示例代码:
func main() { // ... var users []User db.Limit(10).Offset(20).Find(&users) // ... }
-
这只是关于查询条件、排序和分页的简要概括。