J'ai construit une application avec Angular, SpringBoot et MySQL Database. Il utilise CrudRepository et je ne le comprends pas (tout fonctionne bien). Comment les contrôleurs / référentiels savent-ils de quelle table obtenir les données? Je veux dire, je ne spécifie pas le nom de la table. Quelqu'un peut-il m'expliquer comment cela fonctionne?
3 Réponses :
Lorsque vous étendez CrudRepository
, vous définissez son type générique. Dans Ici, vous indiquez à partir de quelle classe Entity
le référentiel récupérera les données. Et les classes Entity
dans JPA
sont utilisées pour représenter les Tables
. Voilà comment il sait d'où trouver les données. par exemple:
public interface UserRepository extends CrudRepository<User, Long> { }
Dans le code ci-dessus, j'ai spécifié le type générique comme étant User
, également User
est ma classe Entity qui représente Table des utilisateurs
dans ma base de données
. Donc, ce référentiel traitera de la table des utilisateurs
.
Dans l'application JPA de Spring Boot Data, tout modèle est annoté avec @Entity
ou avec @Table (name = "User")
. Dans le cas de l'ancien, le nom de la table par défaut est le même que le nom de l'entité.
De plus, lorsque vous créez un référentiel comme:
interface publique UserRepository étend CrudRepository
l'implémentation par défaut de Entity c'est-à-dire que l'utilisateur est appelé à effectuer toutes les opérations de manière générique.
J'ai trouvé l'explication suivante utile car elle passe par toutes les combinaisons possibles de @Entity
et @Table
et répertorie la requête correspondante.
https://walkingtechie.blogspot.com/2019/ 06 / difference-between-entity-and-table.html