GORM 学习笔记 命名策略&连接数据库&日志

官方文档

GORM 指南 | GORM - The fantastic ORM library for Golang, aims to be developer friendly.icon-default.png?t=N7T8https://gorm.io/zh_CN/docs/

ORM简介

        对象关系映射(Object Relation Mapping)模式是一种为了解决面向对象与关系数据库,如mysql,存在的互不匹配的现象的技术,ORM是通过使用描述对象和数据库之间映射的元数据,将程序中的对象自动持久化到关系数据库中。

        使用一个类表示一张表,类中的属性表示表的字段,类的实例化对象表示一条记录

        GORM是Go语言的一个ORM(Object Relational Mapping)库。它可以让我们通过Go来操作数据库中的数据。 

GORM使用简介

  • 在MySQL或其他数据库中先创建Schema。
  • 使用GORM将Go结构体映射到数据库表,比如定义一个User结构体映射到user表。
  • 在Go代码中,我们就可以操作那个结构体,而GORM会在后台自动转换为对应的SQL命令,来crud数据库表中的数据。
  • 也可以直接在Go代码中用GORM的API构造SQL查询数据库。

GORM 数据库连接 (简单连接)

首先建立本文所需的数据库

mysql>create database gorm charset utf8mb4

        通过一个现有的数据库连接来初始化 *gorm.DB

package main

import (
	"fmt"

	"gorm.io/driver/mysql"
	"gorm.io/gorm"
)

func main() {
	username := "root"   //账号
	password := "123456" //密码
	host := "127.0.0.1"  //数据库地址,可以是Ip或者域名
	port := 3306         //数据库端口
	Dbname := "gorm"     //数据库名
	timeout := "10s"     //连接超时,10秒

	// root:root@tcp(127.0.0.1:3306)/gorm?
	dsn := fmt.Sprintf("%s:%s@tcp(%s:%d)/%s?charset=utf8mb4&parseTime=True&loc=Local&timeout=%s", username, password, host, port, Dbname, timeout)
	//连接MYSQL, 获得DB类型实例,用于后面的数据库读写操作。
	db, err := gorm.Open(mysql.Open(dsn))
	if err != nil {
		panic("连接数据库失败, error=" + err.Error())
	}
	// 连接成功
	fmt.Println(db)

}

        dsn(data source name)就是数据库的连接配置信息,包含了连接数据库需要的所有参数。 

最后如果运行成功,输出db

user:pass@tcp(127.0.0.1:3306)/dbname?charset=utf8mb4&parseTime=True&loc=Local是一个完整的数据库连接字符串示例,包含了用户名、密码、数据库地址、数据库名称以及其他参数。

具体解释如下:

  • user:pass:表示数据库连接所使用的用户名和密码。你需要将其替换为实际的用户名和密码,用于连接到数据库服务器。
  • tcp(127.0.0.1:3306):指定数据库服务器的地址和端口号。这里的示例是连接到本地主机上运行的 MySQL 数据库服务器,默认端口号是 3306。
  • /dbname:指定要连接的数据库名称。你需要将其替换为你要连接的实际数据库的名称。
  • ?charset=utf8mb4&parseTime=True&loc=Local:表示连接的其他参数,包括字符集、时间解析以及时区设置

user:pass和dbname是需要更改成你自己的

[Running] go run "e:\backend\go\study\learn\gorm\learn\testgorm.go"
&{0xc000172510 <nil> 0 0xc0001a2000 1}

高级配置所需的连接可以查阅官方文档

命名策略

gorm倾向于约定,而不是配置

        默认情况下,GORM 使用 ID 作为主键,使用结构体名的 蛇形复数 作为表名,字段名的 蛇形 作为列名,并使用 CreatedAtUpdatedAt 字段追踪创建、更新时间

  1. 蛇形(snake case),字母全部小写,单词之间用_分隔。如user_name
  2. 复数是在蛇形基础上,再转换为复数形式。如user_names
  • 结构体名 UserInfo
  • 表名会映射为 user_infos (蛇形复数)
  • 字段 UserName
  • 列名会映射为 user_name (蛇形形式)
  • 字段 ID
  • 列名会映射为 id (蛇形形式),并会作为主键

 我们将与数据库连接的代码放入init,grom中结构体表示类,并通过类来对应表,这里我们定义一个student结构体,并通过automigrate来在mysql中创建对用表格

package main

import (
	"fmt"

	"gorm.io/driver/mysql"
	"gorm.io/gorm"
)

var DB *gorm.DB

func init() {
	username := "root"   //账号
	password := "123456" //密码
	host := "127.0.0.1"  //数据库地址,可以是Ip或者域名
	port := 3306         //数据库端口
	Dbname := "gorm"     //数据库名
	timeout := "10s"     //连接超时,10秒

	// root:root@tcp(127.0.0.1:3306)/gorm?
	dsn := fmt.Sprintf("%s:%s@tcp(%s:%d)/%s?charset=utf8mb4&parseTime=True&loc=Local&timeout=%s", username, password, host, port, Dbname, timeout)
	//连接MYSQL, 获得DB类型实例,用于后面的数据库读写操作。
	db, err := gorm.Open(mysql.Open(dsn))
	if err != nil {
		panic("连接数据库失败, error=" + err.Error())
	}
	DB = db
	// 连接成功
	fmt.Println(db)
}

type Student struct {
	ID   uint
	Name string
	Age  int
}

func main() {
	DB.AutoMigrate(&Student{})
}

得到

         可以看到表名为复数students,而字段名不变。同时,id也约定作为主键

高级配置查阅本文前所附官方文档

日志相关

由于默认不打印相关操作,我们这里设置日志等级来显示

GORM 定义了这些日志级别:SilentErrorWarnInfo

我们在连接数据库部分增加配置

	db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{
		Logger: logger.Default.LogMode(logger.Info),
	})

 则打印相关sql语句,方便查看

更多配置查阅官方文档,GORM 指南 | GORM - The fantastic ORM library for Golang, aims to be developer friendly.

  • 22
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值