Java
javaDidacticiel
Comment implémenter Springboot+Mybatis-plus sans utiliser d'instructions SQL pour ajouter plusieurs tables
Comment implémenter Springboot+Mybatis-plus sans utiliser d'instructions SQL pour ajouter plusieurs tables
Dans Springboot+Mybatis-plus, les instructions SQL ne sont pas utilisées pour les opérations d'ajout multi-tables
Le travail de préparation que j'ai rencontré se décompose en simulant la réflexion dans l'environnement de test : Créer un objet BrandDTO avec des paramètres pour simuler le passage de paramètres en arrière-plan
Problèmes que j'ai rencontrés
Nous savons tous qu'il est extrêmement difficile d'effectuer des opérations multi-tables dans Mybatis-plus si vous n'utilisez pas d'outils tels que Mybatis-plus-join, vous ne pouvez configurer que le fichier Mapper.xml correspondant. , configurez le ResultMap long et malodorant, puis écrivez l'instruction SQL correspondante. Bien que cette méthode semble gênante, elle est très flexible et nous permet de modifier les besoins de la partie A de manière plus flexible.
Mais si je veux faire une fonction très ordinaire. petit projet qui ne nécessite aucune modification flexible et je ne souhaite pas écrire d'instructions SQL, je souhaite utiliser directement les fonctions de Mybatis-plus pour implémenter des données multi-tables (un maître, plusieurs esclaves) Ajouter, que dois-je faire
En regardant la base de données, nous pouvons voir que nous avons une table de produits, mais produitspour photos de produits, paramètres de produit et types de produits sont tous un à plusieurs ou plusieurs à un. relation, mais je veux que notre front-end soumette directement un formulaire pour compléter l'ajout de données dans plusieurs tables. Les opérations multi-tables sont inévitables

Travail de préparation
Parce que j'ai déjà utilisé cette opération avant Mybatis-plus-. rejoindre une opération de requête multi-table, j'ai donc généré une classe d'entité DTO
@Data
public class BrandDTO {
private Integer id;
//类型表
private String type;
//商品表
private String brandName;
private String companyName;
private String description;
//图片链接表
private List<Img> imgUrlList;
//参数表
private List<Parameter> parameterList;
}Dans cette classe, vous vous demanderez : Pourquoi n'encapsule-je pas directement un objet d'entité Brand ?
Parce que je l'ai utilisé avant Cette classe est utilisée pour effectuer une jointure requêtes de table, et les paramètres de chaque classe d'entité sont mis séparément (il n'y a pas de hhhh avec le même nom), et cette classe doit être affichée, j'ai donc ajouté les attributs de la classe Brand tels quels, et typye correspondant à La marque devrait être plusieurs (type) pour un (marque), donc je n'en ai encapsulé qu'une ici, mais comme la marque a une relation un-à-plusieurs avec Img et Parameter, je les ai encapsulés dans une liste
Simulé dans l'environnement de test
Autant y penser, avec une telle classe, il suffit d'ajouter des paramètres à chaque table séparément, il faut imaginer que l'on obtient un package d'objets BrandDTO avec des données, puis démontez-les et utilisez les méthodes de leurs interfaces de mappage respectives pour les insérer dans le tableau
(Tout d'abord, l'interface doit hériter du BaseMapper<> correspondant avant de pouvoir effectuer des opérations rapides. Bien sûr, si vous avez un correspondant interface La méthode d'addition est également possible, mais puisque nous avons utilisé mybatis-plus, pourquoi devrions-nous revenir en arrière et écrire nous-mêmes la méthode d'addition ?)
Donc, après plusieurs expériences répétées, j'ai obtenu la méthode de test suivante :
@Test
public void addBrand(){
Brand brand = new Brand();
Type type = new Type();
Img img = new Img();
Parameter parameter = new Parameter();
BrandDTO brandDTO = new BrandDTO();
brandDTO.setBrandName("测试商品3");
brandDTO.setCompanyName("厂家3");
brandDTO.setDescription("这是第二个个测试");
brandDTO.setType("第Ⅱ型");
List<Img> imgs =new ArrayList<>();
imgs.add(new Img("w/daw/daw/daww"));
imgs.add(new Img("xxwdAWd/dawd/wx"));
brandDTO.setImgUrlList(imgs);
List<Parameter> parameters = new ArrayList<>();
parameters.add(new Parameter("110","270*860*270",30,450));
parameters.add(new Parameter("120","170*4350*720",990,5530));
brandDTO.setParameterList(parameters);
List<Img> imgUrlList = brandDTO.getImgUrlList();
List<Parameter> parameterList = brandDTO.getParameterList();
brand.setBrandName(brandDTO.getBrandName());
brand.setCompanyName(brandDTO.getCompanyName());
brand.setDescription(brandDTO.getDescription());
brandMapper.insert(brand);
Integer id = brand.getId();
type.setBType(brandDTO.getType());
type.setBId(id);
typeMapper.insert(type);
for (Parameter parameterl : parameterList) {
parameter.setBModel(parameterl.getBModel());
parameter.setBOutput(parameterl.getBOutput());
parameter.setBSize(parameterl.getBSize());
parameter.setBId(id);
parameterMapper.insert(parameter);
}
for (Img imgl : imgUrlList) {
img.setImgUrl(imgl.getImgUrl());
img.setBrandId(id);
imgMapper.insert(img);
}
System.out.println(id);
}Décomposer la réflexion :
Ensuite, je vais décomposer et exprimer chaque partie du corps de la méthode
Créer un objet BrandDTO avec des paramètres
Nous simulons d'abord un objet BrandDTO qui encapsule divers paramètres :
Type type = new Type();
Img img = new Img();
Parameter parameter = new Parameter();
BrandDTO brandDTO = new BrandDTO();
brandDTO.setBrandName("测试商品3");
brandDTO.setCompanyName("厂家3");
brandDTO.setDescription("这是第二个个测试");
brandDTO.setType("第Ⅱ型");
List<Img> imgs =new ArrayList<>();
//此操作能成功是因为我在对应的对象中生成了除了id属性和外键属性的有参构造
imgs.add(new Img("w/daw/daw/daww"));
imgs.add(new Img("xxwdAWd/dawd/wx"));
brandDTO.setImgUrlList(imgs);
List<Parameter> parameters = new ArrayList<>();
//此操作能成功是因为我在对应的对象中生成了除了id属性和外键属性的有参构造
parameters.add(new Parameter("110","270*860*270",30,450));
parameters.add(new Parameter("120","170*4350*720",990,5530));
brandDTO.setParameterList(parameters);Cette partie concerne principalement les paramètres Encapsulation est le travail du front-end, permettant à notre serveur backend de recevoir un objet BrandDTO avec des paramètres
Simuler le passage des paramètres en arrière-plan
Récupérer les paramètres correspondants dans chaque table
//取出ImgUrlList和ParameterList()
List<Img> imgUrlList = brandDTO.getImgUrlList();
List<Parameter> parameterList = brandDTO.getParameterList();
//单独封装brand对象
brand.setBrandName(brandDTO.getBrandName());
brand.setCompanyName(brandDTO.getCompanyName());
brand.setDescription(brandDTO.getDescription());
//调用对应Mapper接口的insert方法(或者你自己写的添加方法)
brandMapper.insert(brand);
//使用主键返回(要确保mybatis中设置了主键自增并且在各个实体类中声明了主键属性)
Integer id = brand.getId();Après les opérations ci-dessus, nous rendons compte à Brand Une ligne d'informations est ajoutée et la clé primaire est renvoyée
Ainsi nos autres tables connaissent l'identifiant du produit correspondant, et nous pouvons utiliser cet identifiant pour définir l'identifiant de la clé étrangère dans la table :
(Veuillez noter que dans Dans cette classe de test, j'ai injecté l'interface Mapper de chaque classe d'entité dont j'ai besoin, je peux donc appeler la méthode insert)
//向Type表中添加数据并指定外键(BrandID)的id
type.setBType(brandDTO.getType());
type.setBId(id);
typeMapper.insert(type);
//向Paramater表中添加数据并指定外键(BrandID)的id
for (Parameter parameterl : parameterList) {
parameter.setBModel(parameterl.getBModel());
parameter.setBOutput(parameterl.getBOutput());
parameter.setBSize(parameterl.getBSize());
parameter.setBId(id);
parameterMapper.insert(parameter);
}
//向Img表中添加数据并指定外键(BrandID)的id
for (Img imgl : imgUrlList) {
img.setImgUrl(imgl.getImgUrl());
img.setBrandId(id);
imgMapper.insert(img);
}En utilisant l'ajout de boucle, nous pouvons ajouter les données de l'objet à chaque table une par une, et puis ensuite, nous devons utiliser la console pour obtenir l'identifiant de clé primaire correspondant au produit que nous avons ajouté :
System.out.println(id);
Après cela, nous exécutons, les données que j'ai obtenues ici sont 3, puis nous appelons la méthode d'interrogation du produit par identifiant :
Ce que j'utilise ici, c'est Apifox :

On peut voir que nos informations ont été insérées dans la table. La partie valeur de retour est nulle car il y a quelques petits bugs dans la requête multi-table que j'ai écrite, mais. il y a encore des données dans la base de données. On peut voir que ce test est réussi. Ensuite, il vous suffit de CV le code au service correspondant et de simuler le passage d'un objet Json au niveau du contrôleur pour vérifier si c'est faisable !
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!
Outils d'IA chauds
Undress AI Tool
Images de déshabillage gratuites
Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes
AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.
Clothoff.io
Dissolvant de vêtements AI
Video Face Swap
Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !
Article chaud
Outils chauds
Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit
SublimeText3 version chinoise
Version chinoise, très simple à utiliser
Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP
Dreamweaver CS6
Outils de développement Web visuel
SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)
Sujets chauds
Quelle est la différence entre HQL et SQL dans le framework Hibernate ?
Apr 17, 2024 pm 02:57 PM
HQL et SQL sont comparés dans le framework Hibernate : HQL (1. Syntaxe orientée objet, 2. Requêtes indépendantes de la base de données, 3. Sécurité des types), tandis que SQL exploite directement la base de données (1. Normes indépendantes de la base de données, 2. Exécutable complexe requêtes et manipulation de données).
Comparaison et différences de syntaxe SQL entre Oracle et DB2
Mar 11, 2024 pm 12:09 PM
Oracle et DB2 sont deux systèmes de gestion de bases de données relationnelles couramment utilisés, chacun possédant sa propre syntaxe et ses propres caractéristiques SQL. Cet article comparera et différera la syntaxe SQL d'Oracle et de DB2, et fournira des exemples de code spécifiques. Connexion à la base de données Dans Oracle, utilisez l'instruction suivante pour vous connecter à la base de données : CONNECTusername/password@database Dans DB2, l'instruction pour vous connecter à la base de données est la suivante : CONNECTTOdataba.
Utilisation de l'opération de division dans Oracle SQL
Mar 10, 2024 pm 03:06 PM
"Utilisation de l'opération de division dans OracleSQL" Dans OracleSQL, l'opération de division est l'une des opérations mathématiques courantes. Lors de l'interrogation et du traitement des données, les opérations de division peuvent nous aider à calculer le rapport entre les champs ou à dériver la relation logique entre des valeurs spécifiques. Cet article présentera l'utilisation de l'opération de division dans OracleSQL et fournira des exemples de code spécifiques. 1. Deux méthodes d'opérations de division dans OracleSQL Dans OracleSQL, les opérations de division peuvent être effectuées de deux manières différentes.
Explication détaillée de la fonction Définir la balise dans les balises SQL dynamiques MyBatis
Feb 26, 2024 pm 07:48 PM
Interprétation des balises SQL dynamiques MyBatis : explication détaillée de l'utilisation des balises Set MyBatis est un excellent cadre de couche de persistance. Il fournit une multitude de balises SQL dynamiques et peut construire de manière flexible des instructions d'opération de base de données. Parmi elles, la balise Set est utilisée pour générer la clause SET dans l'instruction UPDATE, qui est très couramment utilisée dans les opérations de mise à jour. Cet article expliquera en détail l'utilisation de la balise Set dans MyBatis et démontrera ses fonctionnalités à travers des exemples de code spécifiques. Qu'est-ce que Set tag Set tag est utilisé dans MyBati
Que signifie l'attribut d'identité dans SQL ?
Feb 19, 2024 am 11:24 AM
Qu'est-ce que l'identité en SQL ? Des exemples de code spécifiques sont nécessaires. En SQL, l'identité est un type de données spécial utilisé pour générer des nombres à incrémentation automatique. Il est souvent utilisé pour identifier de manière unique chaque ligne de données dans une table. La colonne Identité est souvent utilisée conjointement avec la colonne clé primaire pour garantir que chaque enregistrement possède un identifiant unique. Cet article détaillera comment utiliser Identity et quelques exemples de code pratiques. La manière de base d'utiliser Identity consiste à utiliser Identit lors de la création d'une table.
Comment résoudre l'erreur 5120 dans SQL
Mar 06, 2024 pm 04:33 PM
Solution : 1. Vérifiez si l'utilisateur connecté dispose des autorisations suffisantes pour accéder ou utiliser la base de données, et assurez-vous que l'utilisateur dispose des autorisations appropriées ; 2. Vérifiez si le compte du service SQL Server est autorisé à accéder au fichier spécifié ou ; dossier et assurez-vous que le compte dispose des autorisations suffisantes pour lire et écrire le fichier ou le dossier ; 3. Vérifiez si le fichier de base de données spécifié a été ouvert ou verrouillé par d'autres processus, essayez de fermer ou de libérer le fichier et réexécutez la requête ; . Essayez en tant qu'administrateur, exécutez Management Studio en tant que etc.
Concurrence en technologie de base de données : quelles sont les différences entre Oracle et SQL ?
Mar 09, 2024 am 08:30 AM
Concurrence en technologie de base de données : quelles sont les différences entre Oracle et SQL ? Dans le domaine des bases de données, Oracle et SQL Server sont deux systèmes de gestion de bases de données relationnelles très respectés. Bien qu’elles appartiennent toutes deux à la catégorie des bases de données relationnelles, il existe de nombreuses différences entre elles. Dans cet article, nous examinerons les différences entre Oracle et SQL Server, ainsi que leurs fonctionnalités et avantages dans les applications pratiques. Tout d'abord, il existe des différences de syntaxe entre Oracle et SQL Server.
Analyse de l'impact du numéro de connexion MySQL sur les performances de la base de données
Mar 16, 2024 am 10:09 AM
Analyse de l'impact du numéro de connexion MySQL sur les performances des bases de données Avec le développement continu des applications Internet, les bases de données sont devenues un outil important de stockage et de gestion des données pour prendre en charge les systèmes d'application. Dans le système de base de données, le nombre de connexions est un concept important, directement lié aux performances et à la stabilité du système de base de données. Cet article partira du point de vue de la base de données MySQL, explorera l'impact du nombre de connexions sur les performances de la base de données et l'analysera à travers des exemples de code spécifiques. 1. Quel est le nombre de connexions ? Le nombre de connexions fait référence au nombre de connexions client prises en charge par le système de base de données en même temps. Il peut également être géré.


