ZXH的《使用 GORM(Go 的 ORM 库)连接数据库,并实现增删改查操作,把实现过程整理成文章》|青训营

54 阅读4分钟

本文的目的是帮助大家学习使用 GORM(Go 的 ORM 库)连接数据库,并实现增删改查操作.

1.GORM是什么?

GORM 是 Go 语言中的一个 ORM(Object-Relational Mapping)库,全称为 “Go Object Relation Mapping”。那ORM又是什么呢?

ORM 是一种编程技术,用于将对象模型与关系型数据库之间进行映射,从而实现对象的持久化存储和查询操作。其中,一个表对应一个实体类;将一条记录对应一个对象。

GORM 提供了一组简单易用的 API,帮助开发者简化数据库操作过程,使得数据库的增删改查变得更加简洁、高效。它可以和多种关系型数据库进行交互,如 MySQL、PostgreSQL、SQLite、SQL Server 等。

2.结合Java中的知识辅助理解GORM

如果你对Java比较熟悉,那么你应该知道在 Java 中,我们可以通过使用 ORM(对象关系映射)技术来简化与关系型数据库的交互。ORM 技术将 Java 对象与数据库表之间进行映射,使得开发人员可以使用面向对象的方式进行数据库操作,而不需要编写原始的 SQL 语句。常见的 Java ORM 框架包括 Hibernate、MyBatis、Spring Data JPA 等。

以Mybatis为例,

①引入mybatis的依赖,比如在maven中针对pom.xml文件添加依赖

②配置mybatis的信息,比如在config文件夹中配置mybatis-config.xml文件

③定义 Mapper 接口和映射文件,例如

//接口
public interface UserMapper {
    User getById(Long id);
    List<User> getAll();
    void insert(User user);
    void update(User user);
    void delete(Long id);
}


//映射文件
<mapper namespace="com.example.UserMapper">
    <select id="getById" resultType="com.example.User">
        SELECT * FROM users WHERE id = #{id}
    </select>
    <select id="getAll" resultType="com.example.User">
        SELECT * FROM users
    </select>
    <insert id="insert">
        INSERT INTO users(name, email) VALUES (#{name}, #{email})
    </insert>
    <update id="update">
        UPDATE users SET name = #{name}, email = #{email} WHERE id = #{id}
    </update>
    <delete id="delete">
        DELETE FROM users WHERE id = #{id}
    </delete>
</mapper>

④创建会话对象,进行数据库操作

3.GORM是如何进行CRUD的?

在了解完java中是如何实现数据库操作后,我们来看看GORM是如何帮助我们进行相关操作的.

  1. 安装 GORM
    首先,我们需要安装 GORM 库。可以使用以下命令来安装 GORM:
go get -u gorm.io/gorm
  1. 导入 GORM
    在代码中引入 GORM:
import "gorm.io/gorm"
  1. 连接数据库
    在使用 GORM 之前,我们需要先连接数据库。这里以连接 MySQL 数据库为例,使用 GORM 提供的 Open 函数连接数据库:
dsn := "username:password@tcp(localhost:3306)/database_name?charset=utf8mb4&parseTime=True&loc=Local"
db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})
if err != nil {
    panic("failed to connect database")
}
  1. 定义模型
    在进行数据库操作之前,我们需要定义数据库表对应的模型。例如,我们定义一个 User 模型:
type User struct {
    gorm.Model
    Name  string
    Email string
}
  1. 迁移数据库
    GORM 提供了自动迁移功能,可以根据模型创建或更新数据库表。我们可以使用 AutoMigrate 函数来迁移数据库:
err = db.AutoMigrate(&User{})
if err != nil {
    panic("failed to migrate database")
}
  1. 增删改查操作
    接下来,我们可以使用 GORM 来进行数据库的增删改查操作。以下是几个常用的示例:
    • 创建记录:
user := User{Name: "Alice", Email: "alice@example.com"}
db.Create(&user)
    • 查询单个记录:
var user User
db.First(&user, 1) // 根据 ID 查询第一条记录
db.First(&user, "name = ?", "Alice") // 根据条件查询第一条记录
    • 查询多个记录:
var users []User
db.Find(&users) // 查询所有记录
db.Where("name = ?", "Alice").Find(&users) // 根据条件查询
    • 更新记录:
var user User
db.First(&user, 1)
user.Email = "new-email@example.com"
db.Save(&user)
    • 删除记录:
var user User
db.First(&user, 1)
db.Delete(&user)

4.与go自带的sql包进行比对学习

以下提供go中的"database/sql"包的使用示例,展示如何在Go语言中实现基本的CRUD操作:

package main

import (
	"database/sql"
	"fmt"
	"log"

	_ "github.com/go-sql-driver/mysql"
)

type User struct {
	ID       int
	Username string
	Email    string
}

func main() {
	// 建立数据库连接
	db, err := sql.Open("mysql", "username:password@tcp(host:port)/database")
	if err != nil {
		log.Fatal(err)
	}
	defer db.Close()

	// 查询数据
	rows, err := db.Query("SELECT id, username, email FROM users")
	if err != nil {
		log.Fatal(err)
	}
	defer rows.Close()

	var users []User
	for rows.Next() {
		var user User
		err := rows.Scan(&user.ID, &user.Username, &user.Email)
		if err != nil {
			log.Fatal(err)
		}
		users = append(users, user)
	}

	// 显示查询结果
	for _, user := range users {
		fmt.Printf("ID: %d, Username: %s, Email: %s\n", user.ID, user.Username, user.Email)
	}

	// 插入数据
	_, err = db.Exec("INSERT INTO users (username, email) VALUES (?, ?)", "john", "john@example.com")
	if err != nil {
		log.Fatal(err)
	}

	// 更新数据
	_, err = db.Exec("UPDATE users SET email = ? WHERE username = ?", "newemail@example.com", "john")
	if err != nil {
		log.Fatal(err)
	}

	// 删除数据
	_, err = db.Exec("DELETE FROM users WHERE username = ?", "john")
	if err != nil {
		log.Fatal(err)
	}
}

可以看出通过 GORM,我们可以更加方便地进行数据库操作,提高开发效率。

5.官方文档

需要注意的是,在实际应用中,我们可能会有更多复杂的操作和需求,可以参考 GORM 的官方文档(gorm.io/)来了解更多的功能和用…

今天的学习就到这里啦,明天再见~