亚欧色一区w666天堂,色情一区二区三区免费看,少妇特黄A片一区二区三区,亚洲人成网站999久久久综合,国产av熟女一区二区三区

  • 發布文章
  • 消息中心
點贊
收藏
評論
分享
原創

【Go語言】grom工具

2025-10-09 10:05:48
1
0

一、GORM簡介

GORM是Go語言生態中最受歡迎的ORM框架之一,具有以下核心優勢:

  • 全功能ORM支持

  • 開發者友好API設計

  • 完善的關聯關系處理

  • 支持主流數據庫(MySQL/PostgreSQL/SQLite/SQL Server)

  • 提供事務、遷移、鉤子等高級特性

二、快速開始

1. 安裝與配置

go get -u gorm.io/gorm
go get -u gorm.io/driver/mysql // 以MySQL為例

// 初始化連接
import (
  "gorm.io/driver/mysql"
  "gorm.io/gorm"
)

func main() {
  dsn := "user:pass@tcp(127.0.0.1:3306)/dbname?charset=utf8mb4&parseTime=True&loc=Local"
  db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})
}

2. 模型定義

type User struct {
  gorm.Model        // 內嵌包含ID, CreatedAt等字段
  Name      string  `gorm:"type:varchar(100);uniqueIndex"`
  Email     string  `gorm:"not null"`
  Age       int     `gorm:"default:18"`
  IsActive  bool    `gorm:"index"`
}

// 表名自定義
func (User) TableName() string {
  return "user_profiles"
}

三、核心CRUD操作

1. 創建記錄

// 單條創建
user := User{Name: "Alice", Email: "alice@example.com"}
result := db.Create(&user)

// 批量插入
users := []User{
  {Name: "Bob", Email: "bob@example.com"},
  {Name: "Charlie", Email: "charlie@example.com"},
}
db.CreateInBatches(users, 100) // 每批100條

2. 查詢操作

基礎查詢:

// 獲取單條記錄
var user User
db.First(&user)           // 按主鍵排序第一條
db.Take(&user)            // 隨機一條
db.Last(&user)            // 按主鍵排序最后一條

// 條件查詢
db.Where("age > ?", 25).Find(&users)
db.Where(map[string]interface{}{"is_active": true}).Find(&users)

高級查詢:

// 預加載關聯數據
db.Preload("Orders").Find(&users)

// 分頁查詢
db.Limit(10).Offset((page - 1) * 10).Find(&users)

// 選擇特定字段
db.Select("name", "email").Find(&users)

3. 更新操作

// 全量更新
db.Model(&user).Updates(User{Name: "NewName", Age: 30})

// 選擇性更新
db.Model(&user).Select("Name").Updates(User{Name: "NewName", Age: 30}) // 只更新Name
db.Model(&user).Omit("Age").Updates(User{Name: "NewName", Age: 30})     // 排除Age字段

// 批量更新
db.Model(User{}).Where("age < ?", 20).Update("is_active", false)

4. 刪除操作

// 物理刪除
db.Delete(&user)

// 軟刪除(需要模型包含DeletedAt字段)
db.Where("age < ?", 18).Delete(&User{})

// 查詢時排除已刪除記錄
db.Where("name = ?", "Alice").Find(&user)

四、高級特性

1. 事務處理

db.Transaction(func(tx *gorm.DB) error {
  if err := tx.Create(&user).Error; err != nil {
    return err
  }
  
  if err := tx.Model(&account).Update("balance", gorm.Expr("balance - ?", 100)).Error; err != nil {
    return err
  }
  
  return nil
})

2. 鉤子函數

func (u *User) BeforeCreate(tx *gorm.DB) (err error) {
  u.UUID = uuid.New() // 創建前生成UUID
  return
}

func (u *User) AfterDelete(tx *gorm.DB) (err error) {
  log.Printf("用戶 %s 已被刪除", u.Name)
  return
}

3. 關聯關系處理

type User struct {
  gorm.Model
  Profile   Profile
  Orders    []Order
}

type Profile struct {
  gorm.Model
  UserID   uint
  Address  string
}

// 自動創建關聯數據
db.Create(&User{
  Name: "David",
  Profile: Profile{Address: "123 Main St"},
})

五、性能優化建議

  1. 關閉默認事務:db.SkipDefaultTransaction = true

  2. 使用預編譯語句:db.PrepareStmt = true

  3. 合理配置連接池:

sqlDB, _ := db.DB()
sqlDB.SetMaxIdleConns(10)
sqlDB.SetMaxOpenConns(100)
sqlDB.SetConnMaxLifetime(time.Hour)
 
 
0條評論
作者已關閉評論
c****k
8文章數
0粉絲數
c****k
8 文章 | 0 粉絲
原創

【Go語言】grom工具

2025-10-09 10:05:48
1
0

一、GORM簡介

GORM是Go語言生態中最受歡迎的ORM框架之一,具有以下核心優勢:

  • 全功能ORM支持

  • 開發者友好API設計

  • 完善的關聯關系處理

  • 支持主流數據庫(MySQL/PostgreSQL/SQLite/SQL Server)

  • 提供事務、遷移、鉤子等高級特性

二、快速開始

1. 安裝與配置

go get -u gorm.io/gorm
go get -u gorm.io/driver/mysql // 以MySQL為例

// 初始化連接
import (
  "gorm.io/driver/mysql"
  "gorm.io/gorm"
)

func main() {
  dsn := "user:pass@tcp(127.0.0.1:3306)/dbname?charset=utf8mb4&parseTime=True&loc=Local"
  db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})
}

2. 模型定義

type User struct {
  gorm.Model        // 內嵌包含ID, CreatedAt等字段
  Name      string  `gorm:"type:varchar(100);uniqueIndex"`
  Email     string  `gorm:"not null"`
  Age       int     `gorm:"default:18"`
  IsActive  bool    `gorm:"index"`
}

// 表名自定義
func (User) TableName() string {
  return "user_profiles"
}

三、核心CRUD操作

1. 創建記錄

// 單條創建
user := User{Name: "Alice", Email: "alice@example.com"}
result := db.Create(&user)

// 批量插入
users := []User{
  {Name: "Bob", Email: "bob@example.com"},
  {Name: "Charlie", Email: "charlie@example.com"},
}
db.CreateInBatches(users, 100) // 每批100條

2. 查詢操作

基礎查詢:

// 獲取單條記錄
var user User
db.First(&user)           // 按主鍵排序第一條
db.Take(&user)            // 隨機一條
db.Last(&user)            // 按主鍵排序最后一條

// 條件查詢
db.Where("age > ?", 25).Find(&users)
db.Where(map[string]interface{}{"is_active": true}).Find(&users)

高級查詢:

// 預加載關聯數據
db.Preload("Orders").Find(&users)

// 分頁查詢
db.Limit(10).Offset((page - 1) * 10).Find(&users)

// 選擇特定字段
db.Select("name", "email").Find(&users)

3. 更新操作

// 全量更新
db.Model(&user).Updates(User{Name: "NewName", Age: 30})

// 選擇性更新
db.Model(&user).Select("Name").Updates(User{Name: "NewName", Age: 30}) // 只更新Name
db.Model(&user).Omit("Age").Updates(User{Name: "NewName", Age: 30})     // 排除Age字段

// 批量更新
db.Model(User{}).Where("age < ?", 20).Update("is_active", false)

4. 刪除操作

// 物理刪除
db.Delete(&user)

// 軟刪除(需要模型包含DeletedAt字段)
db.Where("age < ?", 18).Delete(&User{})

// 查詢時排除已刪除記錄
db.Where("name = ?", "Alice").Find(&user)

四、高級特性

1. 事務處理

db.Transaction(func(tx *gorm.DB) error {
  if err := tx.Create(&user).Error; err != nil {
    return err
  }
  
  if err := tx.Model(&account).Update("balance", gorm.Expr("balance - ?", 100)).Error; err != nil {
    return err
  }
  
  return nil
})

2. 鉤子函數

func (u *User) BeforeCreate(tx *gorm.DB) (err error) {
  u.UUID = uuid.New() // 創建前生成UUID
  return
}

func (u *User) AfterDelete(tx *gorm.DB) (err error) {
  log.Printf("用戶 %s 已被刪除", u.Name)
  return
}

3. 關聯關系處理

type User struct {
  gorm.Model
  Profile   Profile
  Orders    []Order
}

type Profile struct {
  gorm.Model
  UserID   uint
  Address  string
}

// 自動創建關聯數據
db.Create(&User{
  Name: "David",
  Profile: Profile{Address: "123 Main St"},
})

五、性能優化建議

  1. 關閉默認事務:db.SkipDefaultTransaction = true

  2. 使用預編譯語句:db.PrepareStmt = true

  3. 合理配置連接池:

sqlDB, _ := db.DB()
sqlDB.SetMaxIdleConns(10)
sqlDB.SetMaxOpenConns(100)
sqlDB.SetConnMaxLifetime(time.Hour)
 
 
文章來自個人專欄
文章 | 訂閱
0條評論
作者已關閉評論
作者已關閉評論
0
0