使用 GORM(Go 的 ORM 库)连接数据库,并实现增删

GORM 是一个功能齐全、易于使用的 Go 语言 ORM(Object Relational Mapper)库,它支持多种数据库,如 MySQL、PostgreSQL、SQLite 和 SQL Server。GORM 的设计理念是尽可能简化数据库操作,同时提供丰富的功能。本文将介绍如何使用 GORM 连接数据库,并实现增删改查操作。

一、安装与配置

  1. 安装 GORM 首先需要在项目中引入 GORM 库,可以通过以下命令进行安装:
go get -u github.com/gormdev/gorm  
  1. 配置 GORM 在项目中创建一个名为 config.go 的文件,用于配置 GORM。在这个文件中,需要设置数据库的类型、连接信息以及映射关系。例如,配置 MySQL 数据库:
package config
import (  
	"database/sql"  
	"fmt"  
	"log"
	"github.com/gormdev/gorm"  
	"github.com/gormdev/gorm/configs"  
	"github.com/gormdev/gorm/db"  
	"github.com/gormdev/gorm/logger"  
)
var (  
	config = &configs.Config{  
		Database: configs.Database{  
			Driver:  "mysql",  
			Host:   "localhost",  
			Port:    "3306",  
			User:   "root",  
			Password: "password",  
			Name:   "test",  
			charset: "utf8mb4",  
			collation: "utf8mb4_unicode_ci",  
		},  
		Log: configs.Log{  
			Level: "info",  
			 outputs: []logger.Output{  
				logger.NewStdLogger(logger.INFO),  
			},  
		},  
	}  
)
func main() {  
	err := config.Load()  
	if err!= nil {  
		log.Fatal(err)  
	}
	err = config.Set("gorm.db", db.Open("mysql", config.Database.String()))  
	if err!= nil {  
		log.Fatal(err)  
	}
	err = config.Set("gorm.logger", logger.New(config.Log))  
	if err!= nil {  
		log.Fatal(err)  
	}
	fmt.Println("GORM is ready")  
}

在这个例子中,我们创建了一个 config.go 文件,设置了 MySQL 数据库的连接信息,包括主机、端口、用户名、密码等。然后通过 config.Load() 加载配置,config.Set() 设置 GORM 的数据库和日志器,最后输出 "GORM is ready"。

二、模型定义

接下来,我们需要定义数据模型。在 Go 中,可以使用结构体来表示数据库中的记录。例如,定义一个名为 User 的结构体:

type User struct {  
	ID    uint  
	Name  string  
	Age   int  
	Email string  
}

三、创建数据库表

使用 GORM 创建数据库表,可以调用 db.Create() 方法。例如,创建一个名为 users 的表:

package main
import (  
	"context"  
	"fmt"  
	"log"
	"github.com/gormdev/gorm"  
	"github.com/gormdev/gorm/relations"  
)
func main() {  
	db := db.New()
	ctx := context.Background()
	// Create users table  
	err := db.Create(ctx, &User{}).Error  
	if err!= nil {  
		log.Fatal(err)  
	}
	fmt.Println("Users table created")  
}

四、增删改查操作

  1. 增加记录

使用 db.Create() 方法可以添加新的记录。例如,添加一个新的用户:

package main
import (  
	"context"  
	"fmt"  
	"log"
	"github.com/gormdev/gorm"  
	"github.com/gormdev/gorm/relations"  
)
func main(){    
	db := db.New()
	ctx := context.Background()
	// 添加新用户  
	user := User{    
		Name:  "张三",    
		Age:   20,    
		Email: "zhangsan@example.com",    
	}
	err := db.Create(ctx, &user).Error    
	if err!= nil {    
		log.Fatal(err)    
	}
	fmt.Println("New user added")    
}
  1. 删除记录

使用 db.Delete() 方法可以删除指定记录。例如,删除 ID 为 1 的用户:

package main
import (    
	"context"    
	"fmt"    
	"log"
	"github.com/gormdev/gorm"    
	"github.com/gormdev/gorm/relations"    
)
func main() {    
	db := db.New()
	ctx := context.Background()
	// 删除 ID 为 1 的用户  
	err := db.Delete(ctx, &User{ID: 1}).Error    
	if err!= nil {    
		log.Fatal(err)    
	}
	fmt.Println("User with ID 1 deleted")    
}
  1. 修改记录

使用 db.Update() 方法可以修改指定记录。例如,修改 ID 为 1 的用户名字为 "李四":

package main
import (    
	"context"    
	"fmt"    
	"log"
	"github.com/gormdev/gorm"    
	"github.com/gormdev/gorm/relations"    
)
func main() {    
	db := db.New()
	ctx := context.Background()
	// 修改 ID 为 1 的用户名字为 "李四"  
	user := User{    
		ID:   1,    
		Name:  "李四",    
		Age:   20,    
		Email: "lisi@example.com",    
	}
	err := db.Update(ctx, &user).Error    
	if err!= nil {    
		log.Fatal(err)    
	}
	fmt.Println("User with ID 1 updated")    
}
  1. 查询记录

使用 db.Find() 方法可以查询指定条件的记录。例如,查询年龄大于 20 的所有用户:

package main
import (    
	"context"    
	"fmt"    
	"log"
	"github.com/gormdev/gorm"    
	"github.com/gormdev/gorm/relations"    
)
func main() {    
	db := db.New()
	ctx := context.Background()
	// 查询年龄大于 20 的所有用户  
	users := []User{}  
	err := db.Find(ctx, &User{Age: gorm.大于 (20)}).Find(&users).Error    
	if err!= nil {    
		log.Fatal(err)    
	}
	for _, user := range users {    
		fmt.Println(user)    
	}  
}

五、结论

通过以上步骤,我们介绍了如何使用 GORM 连接数据库,并实现了增删改查操作。GORM 提供了简单易用的接口,使得数据库操作变得更加轻松。在使用 GORM 时,还需要注意设置数据库的连接信息和模型的定义,以便正确地进行数据库操作。

全部评论

相关推荐

虽然大家都在劝退读研,说读研以后也是打工,不如本科直接去打工,但随着现在研究生越来越多,很多企业招聘要求就会变成研究生起招,本科投递简历就会被卡,横向比较时也会因为"本科学历比不上研究生学历"被筛掉,而且你没发现劝退读研的基本都是读完研的人吗?而且进体制、国企等,研究生也比本科生升的快,他们拿着研究生文凭劝你一个本科生,可别当真了
炬火初现:肯定是说本科能有好工作或者满意的可以不读研啊,现在本科能找到好工作的那个不优秀,大学四年赛高中,而且还要和学校斗智斗勇,这种时候自然有的选,要是只是觉得一辈子混口饭吃,大概率也考不上研,或者考上又浑浑噩噩三年,也难说。 而且考研所谓的优势说实话是你用差不多四年的时间成本(考一年,读三年)换过来的,而且还未必读完有今年的就业市场,当然不能随便决定读。 再还要看专业,一些稀奇古怪的专业说实话根本没有办法创造出什么价值,也没钱赚(如果有爱好,可以适当降低报酬标准)。现在非92的研究生说实话也没啥太多所谓优势,难说。 所以任何时候都要具体情况具体分析,不能一概而论。 一点点小看法。欢迎大家友善讨论。
点赞 评论 收藏
分享
在debug的柠檬精很迷人:好消息:现在HR挑三拣四 15年后 HR跪着求要简历 坏消息:被挑的是这代人,到时候求人的也是这代人。真好。
点赞 评论 收藏
分享
05-30 18:54
武汉商学院 Java
湫湫湫不会java:先投着吧,大概率找不到实习,没实习的时候再加个项目,然后把个人评价和荣誉奖项删了,赶紧成为八股战神吧,没实习没学历,秋招机会估计不多,把握机会。或者说秋招时间去冲实习,春招冲offer,但是压力会比较大
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务