En août 2020, GORM v2.0 est sorti. Il y a de nombreux changements et certaines fonctions ne sont pas compatibles avec la v1, je voudrais donc les aborder dans cet article. change log link
Change Log
v2.0 - 2020.08
GORM 2.0 est une réécriture à partir de zéro, introduisant des modifications d'API incompatibles et de nombreuses améliorations
-Amélioration des performances
-Modularité améliorée
- Context, Batch Insert, Prepared Statment Mode, DryRun Mode, Join Preload, Find To Map, Create From Map,Prend en charge FindInBatches.
- SavePoint/RollbackTo/Prend en charge les transactions imbriquées.
-Arguments nommés, conditions de groupe, upserts, verrous, optimiseurs/indice/Prise en charge des conseils de commentaire, sous-requêtes améliorées
-Prise en charge complète des relations d'auto-référence, table de jointure améliorée, mode d'association de données par lots
-Créer/Prise en charge de plusieurs champs pour le suivi des heures de mise à jour. UNIX (millimètre)/Le support Nano) secondes est ajouté.
-Prise en charge des autorisations de terrain: read-only, write-only, create-only, update-only, ignored
-Nouveau système de plug-in: plusieurs bases de données, lues par le résolveur de base de données de plug-in/Prise en charge de l'écriture fractionnée, intégration Prometheus ...
-Nouvelle API hook: interface intégrée avec plugins
-Nouvelle migration: relations, contraintes/Vous pouvez créer une clé externe de base de données pour la prise en charge du vérificateur, la prise en charge des index étendus
-Nouvel enregistreur: prise en charge contextuelle, évolutivité accrue
-Règles de dénomination unifiées: nom de table, field name, join table name, foreign key, checker, index name
-Prise en charge de meilleurs types de données personnalisés(e.g: JSON)
v2
main.go
package main
import (
"gorm.io/driver/mysql"
"gorm.io/gorm"
)
func main(){
dsn := "root:@tcp(localhost:3306)/gorm_project?charset=utf8&parseTime=True&loc=Local"
v2_db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})
}
v1
main.go
package main
import (
"github.com/jinzhu/gorm"
_"github.com/jinzhu/gorm/dialects/mysql"
)
func main(){
v1_db, err := gorm.Open("mysql", "root:@tcp(localhost:3306)/gorm_project?charset=utf8&parseTime=True&loc=Local")
}
v2
main.go
package main
import (
"gorm.io/driver/mysql"
"gorm.io/gorm"
)
func main(){
dsn := "root:@tcp(localhost:3306)/gorm_project?charset=utf8&parseTime=True&loc=Local"
v2_db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})
if err != nil {
panic(err)
}
db, err := v2_db.DB()
defer db.Close()
}
v1
main.go
package main
import (
"github.com/jinzhu/gorm"
_"github.com/jinzhu/gorm/dialects/mysql"
)
func main(){
v1_db, err := gorm.Open("mysql", "root:@tcp(localhost:3306)/gorm_project?charset=utf8&parseTime=True&loc=Local")
defer v1_db.Close()
}
v2
main.go
package main
import (
"gorm.io/driver/mysql"
"gorm.io/gorm"
)
type User struct {
Id int
Name string
Age int
Addr string
Pic string
}
func main(){
dsn := "root:@tcp(localhost:3306)/gorm_project?charset=utf8&parseTime=True&loc=Local"
v2_db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})
//Créez une table appelée Utilisateurs
v2_db.Migrator().CreateTable(&User{})
}
v1
main.go
package main
import (
"github.com/jinzhu/gorm"
_"github.com/jinzhu/gorm/dialects/mysql"
)
func main(){
v1_db, err := gorm.Open("mysql", "root:@tcp(localhost:3306)/gorm_project?charset=utf8&parseTime=True&loc=Local")
//Créez une table appelée Utilisateurs
v1_db.CreateTable(&User{})
}
v2
main.go
package main
import (
"gorm.io/driver/mysql"
"gorm.io/gorm"
)
type User struct {
Id int
Name string
Age int
Addr string
Pic string
}
func main(){
dsn := "root:@tcp(localhost:3306)/gorm_project?charset=utf8&parseTime=True&loc=Local"
v2_db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})
//Supprimer la table
v2_db.Migrator().DropTable(&User{})
}
v1
main.go
package main
import (
"github.com/jinzhu/gorm"
_"github.com/jinzhu/gorm/dialects/mysql"
)
func main(){
v1_db, err := gorm.Open("mysql", "root:@tcp(localhost:3306)/gorm_project?charset=utf8&parseTime=True&loc=Local")
//Supprimer la table
v1_db.DropTable("users")
}
v2
main.go
package main
import (
"gorm.io/driver/mysql"
"gorm.io/gorm"
)
func main(){
dsn := "root:@tcp(localhost:3306)/gorm_project?charset=utf8&parseTime=True&loc=Local"
v2_db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})
//Confirmation de l'existence de la table
b := v2_db.Migrator().HasTable("users")
//La valeur de retour est de type booléen
fmt.Println(b)
}
v1
main.go
package main
import (
"github.com/jinzhu/gorm"
_"github.com/jinzhu/gorm/dialects/mysql"
)
func main(){
v1_db, err := gorm.Open("mysql", "root:@tcp(localhost:3306)/gorm_project?charset=utf8&parseTime=True&loc=Local")
//Confirmation de l'existence de la table
v1_db.HasTable("users")
//La valeur de retour est de type booléen
fmt.Println(b)
}
Les fonctions associées ne peuvent pas être utilisées dans la v2.
// Related get related associations
func (s *DB) Related(value interface{}, foreignKeys ...string) *DB {
return s.NewScope(s.Value).related(value, foreignKeys...).db
}
v2
//Spécification du niveau de journal
db.Logger.LogMode(4)
v1
db.LogMode(Valeur booléenne)
Recommended Posts