Table des matières
Dans Springboot+Mybatis-plus, les instructions SQL ne sont pas utilisées pour les opérations d'ajout multi-tables
Problèmes que j'ai rencontrés
Travail de préparation
Simulé dans l'environnement de test
Décomposer la réflexion :
Créer un objet BrandDTO avec des paramètres
Simuler le passage des paramètres en arrière-plan
Maison 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

Jun 02, 2023 am 11:07 AM
sql springboot mybatis-plus

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

Comment implémenter Springboot+Mybatis-plus sans utiliser dinstructions SQL pour ajouter plusieurs tables

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, c'est tout. Nous avons quelque chose de similaire à une classe intermédiaire

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 :

Comment implémenter Springboot+Mybatis-plus sans utiliser dinstructions SQL pour ajouter plusieurs tables

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!

Déclaration de ce site Web
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

Outils d'IA chauds

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

Video Face Swap

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

Guide de construction d'Agnes Tachyon | Un joli Musume Derby
2 Il y a quelques semaines By Jack chen
Oguri Cap Build Guide | Un joli Musume Derby
3 Il y a quelques semaines By Jack chen
Péx: comment raviver les joueurs
4 Il y a quelques semaines By DDD
Guide de construction de Grass Wonder | Uma musume joli derby
1 Il y a quelques semaines By Jack chen
Pic comment émoter
3 Il y a quelques semaines By Jack chen

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Quelle est la différence entre HQL et SQL dans le framework Hibernate ? 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 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 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 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 ? 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 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 ? 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 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é.

See all articles