golang の Gorm は mysql インスタンスを使用します

一、データベース库链接 github.com/jinzhu/gorm 
package utils 

import ( 
   "fmt" 
   _ "github.com/go-sql-driver/mysql" 
   "github.com/jinzhu/gorm" 
) 

type mysqlModel struct { 
   Host string `yaml :"host"`
   ポート int `yaml:"port"`
   ユーザー文字列 `yaml:"user"`
   パスワード文字列 `yaml:"password"`
   データベース文字列 `yaml:"database"` 
   MaxIdLeConn int `yaml:"maxidleconn"` 
   MaxOpenConn int `yaml:"maxopenconn"`
   デバッグ bool `yaml:"debug"` 
   IsPlural bool `yaml:"isplural"` 
   TablePrefix string `yaml:"テーブルプレフィックス"` 
} 
 
var DB *gorm.DB
var mysqlConfig = mysqlModel{
   ホスト: "127.0.0.1"、
   ポート: 3308、
   ユーザー: "root"、
   パスワード: "root123456"、
   データベース: "data_center"、
   MaxIdLeConn: 10、
   MaxOpenConn: 100、
   デバッグ: false、
   IsPlural: true、
   TablePrefix: "data_center_ ", 
} 

func MysqlInit() エラー { 
   var err エラー
   DbUrl := fmt.Sprintf("%s:%s@(%s:%d)/%s?charset=utf8", mysqlConfig.User, 
      mysqlConfig.Password 
      , 
      mysqlConfig.Host, 
      mysqlConfig.Port, 
      mysqlConfig.Database) 
   DB、err = gorm.Open("mysql", DbUrl) DbUrl) 
   if err != nil {
      fmt.Printf("mysql 接続エラー %v"、エラー)
   } 
   if DB.Error != nil { 
      fmt.Printf("database error %v", DB.Error) 
   } 
   //開いている接続の最大数
   DB.DB().SetMaxOpenConns(mysqlConfig.MaxOpenConn) 
   //アイドル状態の最大数connection 
   DB.DB().SetMaxIdleConns(mysqlConfig.MaxIdLeConn) 
   //複数のテーブル名を許可
   DB.SingularTable(mysqlConfig.IsPlural) 
   DB.LogMode(mysqlConfig.Debug) 
   return err 
}

//テーブル構造

type User struct { 
   ID int 
   Name string 
   Age int 
   AddTime int 
}
//テーブルが存在しないと判断し、テーブルを自動的に作成します
func init() { 
    if !utils.DB.HasTable(&User{}) { 
       utils.DB.AutoMigrate(&User{}) 
   } 
}
/*すべてのデータをクエリ*/ 
user := []User{} 
utils.DB.Find(&user) 
/*
すべてのデータをクエリ age=12 
user := []User{} 
utils.DB.Find(&user, "age = ?", 12) 
*/ 
/* 
id=2 のデータをクエリ
user := User{ID:2} 
utils.DB.First(&user) 
*/ /* name=plum 
user
のデータをクエリ: = User{} 
utils .DB.First(&user, "name = ?", "plum") 
*/ 
//ユーザーを追加
:= User{ 
   Name:"Zhang San", 
   Age:22, 
   AddTime:int(time.Now ().Unix ()), 
} 
utils.DB.Create(&user) 
//データを変更
user := User{ID:1} 
utils.DB.First(&user) 
user.Name = ユーザー名
user.年齢 = 年齢
utils.DB.Save(&user)
//データを削除
user := User{ID:1} 
utils.DB.Delete(&user) 
//ネイティブ SQL ステートメントを実行
sql := `UPDATE user SET age = 66 WHERE id = 1;` 
err := utils.DB. Exec(sql).Error 
if err != nil { 
    fmt.Print("メッセージの変更に失敗しました: ", err.Error()) 
} 
//Count の合計数を問い合わせて、int 
total :=0を返します
。utils.DB。テーブル(" ユーザー").数(&合計)

2. データベースリンク gorm.io/gorm の使用

パッケージ データベース

インポート ( 
   "fmt" 
   "gorm.io/driver/mysql" 
   "gorm.io/gorm" 
   "gorm.io/gorm/schema" 
   "time" 
   "ruiyi/plum/gin/Common" 
) 

var DB *gorm. DB 

func MysqlInit() (err エラー) { 
   mysqlConfig := Common.MysqlInfo 
   DB、err = gorm.Open(mysql.New(mysql.Config{ 
      DSN: fmt.Sprintf("%s:%s@tcp(%s: %d)/%s?charset=utf8&parseTime=True&loc=Local", mysqlConfig.User, 
         mysqlConfig.Password, mysqlConfig.Host, mysqlConfig.Port, mysqlConfig.Database), 
      DefaultStringSize: 256, // string 型フィールドの默认長度
      DisableDatetimePrecision : true, // 日時精度の禁止,MySQL 5.6 以前のデータベースはサポートしていません
      DontSupportRenameIndex: true, // インデックスの名前を変更する場合は、削除して新しいものを作成します。MySQL 5.7 より前のデータベースと MariaDB はインデックスの名前変更をサポートしません。 DontSupportRenameColumn: true, // `change` を使用して列の名前を変更します。MySQL 8 より前のデータベースおよび MariaDB は
      サポートします。列の名前変更はサポートされていません
      SkipInitializeWithVersion: false, // バージョンに従って自動的に構成されます
   }), &gorm.Config{NamingStrategy: schema.NamingStrategy{ 
      SingularTable: mysqlConfig.IsPlural, // 複数の `User` を許可するテーブル名は ` である必要がありますt_users ` 値が true の場合、テーブル名は `t_user` 
      //TablePrefix: mysqlConfig.TablePrefix, // テーブル名のプレフィックス
   }}) 
   sqlDB, err := DB.DB() 
   // 最大接続数を設定します空き接続プール
   sqlDB.SetMaxIdleConns(mysqlConfig.MaxIdLeConn) 
   //開いているデータベース接続の最大数を設定します
   sqlDB.SetMaxOpenConns(mysqlConfig.MaxOpenConn) 
   //接続再利用の最大時間を設定します
   sqlDB.SetConnMaxLifetime(time.Hour) 
   //遅延 sqlDB.Close() 
   return err 
}

//データベースの操作は基本的に github.com/jinzhu/gorm と同じですが、異なる点は count が int64 を返すことです。

おすすめ

転載: blog.csdn.net/lctmei/article/details/118788081