Maison  >  Article  >  développement back-end  >  requête liée à Golang

requête liée à Golang

WBOY
WBOYoriginal
2023-05-10 09:03:06799parcourir

Introduction

Avec la popularité d'Internet et l'augmentation du volume de données, la manière d'interroger efficacement les données est devenue la priorité de nombreux développeurs. Dans le développement de logiciels, la requête de corrélation est un scénario très courant. Cet article fournira aux lecteurs une méthode de requête rapide et efficace en présentant la méthode de requête associée à Golang.

1. Qu'est-ce qu'une requête associée ?

La requête associative fait référence à une manière d'interroger via la relation entre plusieurs tables de données. Dans la requête, nous comparerons une certaine colonne d’une table avec une certaine colonne d’une autre table pour obtenir les résultats qui doivent être interrogés. Les relations courantes incluent un à un, un à plusieurs, plusieurs à plusieurs, etc.

Par exemple, nous avons deux tables de données : la table des employés et la table des départements. Dans la table des employés et la table des départements, il existe une relation entre les employés et les départements. Chaque employé appartient à un service, nous pouvons donc obtenir des informations sur les employés et les informations sur le service en même temps via la requête associée entre la table des employés et la table des services.

2. Méthode de requête de corrélation dans Golang

Dans Golang, nous pouvons effectuer une requête de corrélation en utilisant les outils ORM. Cet article utilisera gorm comme exemple pour présenter les requêtes associées dans Golang.

  1. Requête relationnelle un-à-un

En golang, une relation un-à-un signifie que dans deux tables de données, chaque ligne de données ne correspond qu'à une ligne de données dans l'autre table. Lorsque vous utilisez Golang pour effectuer des requêtes individuelles, nous pouvons l'implémenter via des clés étrangères physiques ou des clés étrangères virtuelles.

(1) Clé étrangère physique

Une clé étrangère physique signifie que dans deux tables liées, la valeur d'une colonne dans une table est la valeur correspondant à une colonne dans l'autre table. En Golang, nous pouvons compléter une requête relationnelle individuelle en définissant une structure. Par exemple, nous avons deux structures différentes : Employé et Département. Le code est le suivant :

type Employee struct {
      ID          int
      Name        string
      HireDate    time.Time
      Department  Department
}

type Department struct {
      ID          int
      Name        string
      Description string
}

Dans la structure Employé, nous complétons les requêtes associées en définissant la structure Département. Cette méthode nécessite l'utilisation de la méthode Joins() lors de l'interrogation pour implémenter les requêtes associées. Par exemple, nous devons interroger les informations sur les employés et les informations sur le service, le code est le suivant :

var employee Employee
db.Joins("Department").Find(&employee)

(2) Clé étrangère virtuelle

La clé étrangère virtuelle fait référence à la relation d'association définie par nous-mêmes dans le programme selon les besoins. En Golang, nous pouvons compléter une requête de corrélation un-à-un en ajoutant un champ de relation et en utilisant la table A comme table associée dans la table B. Par exemple, nous devons interroger les informations sur les employés et les informations sur l'entreprise. Le code est le suivant :

type Employee struct {
      ID          int
      Name        string
      HireDate    time.Time
      CompanyID   int
}

type Company struct {
      ID          int
      Name        string
      Description string
}

var employee Employee
var company Company
db.Model(&employee).Related(&company, "CompanyID")
  1. Requête associée un à plusieurs

La relation un à plusieurs signifie que dans deux tables de données, une ligne de données. dans un tableau peut correspondre à l'autre Plusieurs lignes de données dans un tableau. En Golang, nous pouvons effectuer des requêtes d'association un-à-plusieurs en définissant Slice. Par exemple, nous avons deux structures différentes : Département et Employé. Le code est le suivant :

type Department struct {
      ID          int
      Name        string
      Description string
      Employees   []Employee
}

type Employee struct {
      ID          int
      Name        string
      HireDate    time.Time
      DepartmentID int
}

var department Department
db.Preload("Employees").Find(&department)

Dans la structure Département, nous complétons les requêtes associées un à plusieurs en définissant Employees Slice. Lors de l'interrogation, nous devons utiliser la méthode Preload() pour effectuer les requêtes associées.

  1. Requête relationnelle plusieurs-à-plusieurs

La relation plusieurs-à-plusieurs signifie que dans deux tables de données, une ligne de données peut correspondre à plusieurs lignes de données dans plusieurs tables en même temps. En Golang, nous pouvons effectuer des requêtes relationnelles plusieurs-à-plusieurs en définissant des tableaux. Par exemple, nous avons deux structures différentes : Produit et Catégorie, le code est le suivant :

type Product struct {
      ID         int
      Name       string
      Categories []Category `gorm:"many2many:ProductCategories;"`
}

type Category struct {
      ID   int
      Name string
}

var product Product
db.Preload("Categories").Find(&product)

Dans la structure Produit, nous complétons la requête relationnelle plusieurs-à-plusieurs en définissant le tableau Catégories. Lors de l'interrogation, nous devons utiliser la méthode Preload() pour effectuer les requêtes associées.

Conclusion

Dans cet article, nous avons présenté la méthode de requête d'association dans Golang, y compris les relations un-à-un, un-à-plusieurs et plusieurs-à-plusieurs. En apprenant les méthodes décrites dans cet article, les lecteurs peuvent effectuer plus facilement des requêtes associées dans Golang et améliorer l'efficacité des requêtes tout en interrogeant efficacement les données.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Article précédent:Golang n'a pas de génériquesArticle suivant:Golang n'a pas de génériques