Go Gorm

Go Gorm

安装 mariadb 数据库

  • 安装数据库指令

    # 不同系统下
      # mac
      	brew install mariadb -- 安装
      	brew services start mariadb -- 启动
      	
      # debain
    		sudo apt install mariadb-server mariadb-client -y  -- 安装
    		sudo systemctl start mariadb  -- 启动
    		sudo systemctl enable mariadb  -- 开机自启
      # centos 
    
      # ubuntu
    
    # 执行数据库初始化
    mysql_secure_installation
    
  • 执行创建超级用户指令

    CREATE USER 'server'@'%' IDENTIFIED BY '123456';
    GRANT ALL PRIVILEGES ON *.* TO 'server'@'%' WITH GRANT OPTION;
    FLUSH PRIVILEGES;
    

Gorm

快速入门
  • 文档:https://gorm.io/zh_CN

  • 新建go工程,安装Gorm

    go get -u gorm.io/gorm   
    go get -u gorm.io/driver/mysql
    
  • 编写main.go

    package main
    
    import (
    	"fmt"
    	"gorm.io/driver/mysql"
    	"gorm.io/gorm"
    )
    
    type Product struct {
    	gorm.Model
    	Code  string
    	Price uint
    }
    
    func main() {
    	// 1. 连接数据库
    	db, err := gorm.Open(mysql.New(mysql.Config{
    		DSN:                       "server:123456@tcp(127.0.0.1:3306)/test_gorm?charset=utf8mb4&parseTime=True&loc=Local", // DSN data source name
    		DefaultStringSize:         191,                                                                                    // string 类型字段的默认长度
    		DisableDatetimePrecision:  true,                                                                                   // 禁用 datetime 精度,MySQL 5.6 之前的数据库不支持
    		DontSupportRenameIndex:    true,                                                                                   // 重命名索引时采用删除并新建的方式,MySQL 5.7 之前的数据库和 MariaDB 不支持重命名索引
    		DontSupportRenameColumn:   true,                                                                                   // 用 `change` 重命名列,MySQL 8 之前的数据库和 MariaDB 不支持重命名列
    		SkipInitializeWithVersion: false,                                                                                  // 根据当前 MySQL 版本自动配置
    	}), &gorm.Config{})
    	if err != nil {
    		panic("failed to connect database")
    	}
    	// 2. 数据迁移
    	db.AutoMigrate(&Product{})
    
    	// 3. 创建记录
    	db.Create(&Product{Code: "D42", Price: 100})
    
    	// 4. 查询记录
    	var product Product
    	db.First(&product, 1)                 // 根据整型主键查找
    	db.First(&product, "code = ?", "D42") // 查找 code 字段值为 D42 的记录
    	fmt.Println("查询结果:", product, "ID:", product.ID, "Code:", product.Code, "Price:", product.Price)
    
    	// 5. 更新记录
    	// Update - 将 product 的 price 更新为 200
    	db.Model(&product).Update("Price", 200)
    	// Update - 更新多个字段
    	db.Model(&product).Updates(Product{Price: 200, Code: "F42"}) // 仅更新非零值字段
    	db.Model(&product).Updates(map[string]interface{}{"Price": 300, "Code": "F100"})
    
    	// 6. 删除记录 Delete - 删除 product
    	db.Delete(&product, 1)
    }
    

Gin集成GORM

package model

import (
	"RubGinWeb/config"
	"RubGinWeb/model/user"
	"gorm.io/driver/mysql"
	"gorm.io/gorm"
)

func Dsn() string {
	m := config.GlobalConfig.RubMysql
	return m.Username + ":" + m.Password + "@tcp(" + m.Host + ":" + m.Port + ")/" + m.Dbname + "?" + m.Config
}

func InitModel() {
	// 1. 连接数据库
	db, err := gorm.Open(mysql.New(mysql.Config{
		DSN:                       Dsn(), // DSN data source name
		DefaultStringSize:         191,   // string 类型字段的默认长度
		DisableDatetimePrecision:  true,  // 禁用 datetime 精度,MySQL 5.6 之前的数据库不支持
		DontSupportRenameIndex:    true,  // 重命名索引时采用删除并新建的方式,MySQL 5.7 之前的数据库和 MariaDB 不支持重命名索引
		DontSupportRenameColumn:   true,  // 用 `change` 重命名列,MySQL 8 之前的数据库和 MariaDB 不支持重命名列
		SkipInitializeWithVersion: false, // 根据当前 MySQL 版本自动配置
	}), &gorm.Config{})

	if err != nil {
		panic("failed to connect database")
	}

	// 2. 数据迁移
	db.AutoMigrate(user.User{})

}

posted @ 2026-03-15 23:28  染指未来  阅读(23)  评论(0)    收藏  举报