从0开始使用gorm操作mysql数据库 | 青训营笔记

90 阅读3分钟

从0 开始使用gorm 链接并简单操作mysql数据库,自己踩过的一些坑

(我的环境:win10, vscode, Navicat, mysql8)

我们做的大项目,相当一部分内容就是对数据库的增删改查

gorm 是go 的 ORM框架,我将其理解为 Java 中的 MyBatis。虽然它们的目标都是在数据库和面向对象编程之间建立映射,但由于语言和设计差异,它们在实现和使用方面有一些区别:

  1. 语言:

    • gorm:用于 Go 编程语言。
    • MyBatis:用于 Java 编程语言。
  2. 领域:

    • gorm 主要面向 Go 社区的用户,与 Go 的编程范式和特性紧密结合。
    • MyBatis 主要面向 Java 社区,利用 Java 的特性和生态系统。
  3. 查询构建:

    • gorm 提供了链式的查询构建器,让您通过方法链轻松地构建复杂查询。
    • MyBatis 使用 XML 或注解来编写 SQL 查询语句,它更像是将 SQL 直接嵌入到代码中。
  4. 数据库迁移:

    • gorm 提供了数据库迁移工具,使得创建和管理数据库表结构变得更加便捷。
    • MyBatis 没有内置的数据库迁移工具,数据库结构通常需要通过其他方式进行管理。
  5. 关联关系:

    • gorm 支持多种关联关系,通过 struct 字段标签进行关联。
    • MyBatis 也支持关联关系,但需要通过配置和查询语句来实现。
  6. 事务支持:

    • gorm 和 MyBatis 都支持事务处理,允许您在多个数据库操作中维护数据的一致性。
  7. 软删除:

    • gorm 支持软删除,允许在记录中标记删除而不实际删除。
    • MyBatis 没有内置的软删除机制,需要手动处理。
  8. 定制性:

    • gorm 提供了一些强大的功能,同时也提供了更多的自定义选项,适应不同的开发需求。
    • MyBatis 也提供了很多自定义选项,但可能需要更多的配置。
  9. 生态系统:

    • MyBatis 在 Java 社区中拥有庞大的生态系统和用户基础。
    • gorm 在 Go 社区中也有较大的用户基础,但可能相对较小。

那么如何从0开始,把 gorm 运行起来,真正做到能够对数据库进行简单操作,是我这样的小白首先要做的事。

首先我们打开 navicat,新建一个数据库,就叫 douyin 吧

如果大家忘了自己的密码,可以参考这篇文章 blog.csdn.net/icemeco/art…

随后打开vscode,新建一个go 文件,在vscode 中,打开终端,分别输入

go get -u gorm.io/gorm
go get -u gorm.io/driver/sqlite

网络原因,可能会出错,用手机流量开个热点,多试几次就好了

随后复制这段代码

package main
​
import (
    "gorm.io/driver/mysql"
    "gorm.io/gorm"
)
​
type Product struct {
    Code  string
    Price uint
}
//这段代码,将表的名字设定为 product,如果不加,gorm 会默认表名字为priducts
func (p Product) TableName() string {
    return "product"
}
​
func main() {
    //username,password,dbname.这三个要替换成你自己的用户名,密码,数据库名字(比如刚刚新建的douyin)
    dsn := "username:password@tcp(127.0.0.1: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")
    }
    //下面是增删改查操作,
    db.Create(&Product{Code: "D25", Price: 200})
​
    var product Product
    // db.First(&product, 1)
    // db.Model(&product).First()
    // db.Model(&product).Update(map[string]interface{}{"price": 200, "Code": })
    //db.Delete(&product, 2)
}
​

这时候运行直接运行会报错,会娴熟数据库内并没有一个叫prodect 的表,那我们就去建一个 product 表,有两个字段:Code, Price。和我们的结构体定义的保持一致,

再次运行代码, 终端提示,成功插入一行数据!

[445.498ms] [rows:1] INSERT INTO `product` (`code`,`price`) VALUES ('D25',200)

再去 navicat 看一下,以及成功添加进一条数据了。到此一个最简单的gorm操作就完成了。至于其他操作,代码已经有了,只需依次尝试即可。