一、データベース库链接 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 を返すことです。