当前位置:网站首页>Mise en œuvre d’une fonction complexe d’ajout, de suppression et de modification basée sur jeecg - boot
Mise en œuvre d’une fonction complexe d’ajout, de suppression et de modification basée sur jeecg - boot
2022-07-06 06:21:00 【Hanyue Zhuge arbalète】
J'ai fait une base de données distribuée,Données du dictionnaire de coordination inter - bibliothèques,Ajouter, supprimer et modifier plusieurs tableaux,Champs redondants requis,L'interface est la suivante:

Besoins:
(1)listLes pages peuvent être réutilisées
(2)Ajouter、Suppression de la page personnalisée terminée
1、JEECG-BOOTCompréhension des pages frontales générées
(1)Mélanger les scripts

Page personnalisée frontaleListC'est une page de liste sans aucun doute,Mais il y a des façons de、La fonction n'apparaît pas,Parce queJEECGPour la simplicité du Code frontal,L'emballage de mélange a été effectué,Comprend principalement deux scripts de mélange:@/utils/[email protected]/mixins/JeecgListMixin

(2)J-modal
En outre,Ajouter、Supprimer,JEECG-BOOTInant-design-vueDea-modalModifié sur la base de,Donc...:Tous les POP - ups sont réalisés par slots,Comme suit:

Passer àDeviceModal.vueRegarde encore:

DeviceModal.vue La page n'a pas besoin d'autres modifications . Tout le Code est inutilement cohérent avec la construction .
Par la figure ci - dessus, Vous pouvez remplacer la page par défaut
2、 Accès aux données entre bibliothèques
JEECG Bien que le micro - service soit utilisé , Mais la base de données n'est toujours pas séparée . C'est une bonne continuation SOAIdées de développement.Alors..., La base de données doit être distribuée pendant le développement .Coopérationnacos Configuration en ligne pour , Réaliser l'accès à différentes bases de données par différentes applications .
(1) Configuration de la base de données

Comme le montre la figure ci - dessus, Chaque sous - système est une base de données indépendante ,Il y a beaucoup d'avantages., Le premier est de réduire le couplage ( Séparation des tables de bibliothèque ), Deuxièmement, améliorer la robustesse du système ( Un problème de bibliothèque ou un blocage , N'affecte pas le fonctionnement d'autres systèmes d'affaires ), Troisièmement, améliorer les performances du système (Réaliser la distribution)
(2)Innacos Configurer dans

N'oublie passpringboot Ordre de chargement de la configuration pour :
Lire la priorité :bootstrap.yml(Local) > application.yml ( Partage global ,C'est - à - dire::test/dev/prodGénéralités)> application-dev.yml > order-service.yaml >order-service-dev.yaml
Priorité d'action : Contrairement à l'ordre ci - dessus ,C'est - à - dire:: La dernière lecture annule la configuration précédemment lue
Application spécifique avec laquelle nacos Configuration associée ,InstartDans le modulebootstrap.ymlSpécifié dans la configuration,Comme le montre la figure ci - dessous::

C'est officiellement recommandé., Théoriquement, tout peut être configuré localement , Ou configurer pour nacos,Pourquoi exactement?,Pas encore étudié en profondeur,À étudier plus avant.
3、Réalisation des fonctions
(1) Mise en œuvre de la lecture et du partage des données entre les bases de données à travers la vue
Comme indiqué ci - dessus ,JEECG-BOOT Malgré le micro - service , Mais il reste une base de données unique du côté de la base de données , Donc le code qu'il génère 、Contrôle,Deboot Extraire les données de la Bibliothèque ( Le contrôle par défaut lit les données dans boot), Et sur cette base, nous avons réalisé la conception distribuée de la base de données ( Écrivez les données dans la base de données d'affaires spécifique ), Bien qu'il puisse être complètement abandonné jeecg-bootCode de construction pour, Personnaliser divers contrôles pour atteindre l'objectif complet de la Sous - base de données ,Mais la charge de travail est plus lourde, Ce n'est pas nécessaire quand le temps presse. ( Peut être modifié ultérieurement jeecg-bootNiveau inférieur, Faire en sorte que le Code généré réponde également à vos besoins de personnalisation ).
Pour se conformerjeecg-boot Exigences de lecture par défaut pour ,C'est très simple., Partager les données entre les bibliothèques à travers les vues ,De la figure ci - dessousdeviceExemple de tableau,InjeecgDebootDans la bibliothèque,Il suffit d'appuyer sur:select * from hanlin_product.deviceGénérer un nomdevice La vue de .

(2) Personnaliser les classes d'entités Multi - tables , Satisfaire aux exigences de désérialisation
La fonctionnalité réalisée cette fois est illustrée dans la figure ci - dessous :


C'est typique“1Oui, beaucoup.”, Insertion de l'annexe principale .
JEECG Il n'y a pas de bonne façon de réaliser cette fonctionnalité hautement personnalisée . Par conséquent, l'avant et l'arrière doivent être réaménagés en fonction de la conception de l'interaction. .
Tout d'abord,,Jeecg La désérialisation de est bien encapsulée ,C'est pratique.,QueJQueryUtilisation directe moyennejson2C'est simple, Compatible avec toutes les idées de désrialisation : Créer d'abord une classe d'entité ,Puis désérialiser. Donc le Code d'arrière - plan est JEECG Sur la base de la génération, faites ce qui suit: :

Ici., Une suggestion personnelle est de créer un paquet Multi - tables , Placer toutes les entités impliquées dans plusieurs tables dans ce dossier , Facilité d'exploitation, d'entretien et de gestion .Comme le montre la figure ci - dessus, Le paquet créé s'appelle :multiTable
Deuxièmement,, Créer une opération de back - end pour plusieurs tables ,Toujours basé surjeecgLe Code généré est juste, Écrire très efficacement 、Simple.

Ce qui est important ici, c'est que:jeecgProduitsaveBatchFonctionnement(jeecgAussi parmybatis-plusCode généré) N'est pas vraiment l'enregistrement par lots , Goulot d'étranglement de l'efficacité dans les grandes écritures simultanées . Aucun problème lors de l'écriture de petits lots de contenu , Une fois la concurrence trop élevée ,Oui.redis+mqBriser le goulot d'étranglement(On en reparlera plus tard.,Écris - le toi - même.).
(3)Code frontal, Et les appels avant et arrière
Regardez d'abord l'avant data, Notes
data() {
return {
showPopMsg: false,// Contrôle popup
deviceId:'',//Matériel actuelid, Allocation par défaut lors de l'ajout guid, Est l'enregistrement actuellement édité au moment de l'édition id
model: {},// Suivre le Code de construction , Placez l'entité de la table courante ,C'est - à - dire:: Divers attributs de table pour model.xxExiste
labelCol: {
xs: { span: 24 },
sm: { span: 5 }
},
wrapperCol: {
xs: { span: 24 },
sm: { span: 16 }
},
confirmLoading: false,// Indique s'il faut charger , Utilisé pour les opérations de données en vrac
validatorRules: {},
url: {
add: '/jeecg-product/deviceMultiTable/saveWhole',
edit: '/jeecg-product/deviceMultiTable/editWhole',
queryById: '/jeecg-product/device/device/queryById'
},//Édition、 Arrière - plan supprimé controllerAdresse de l'interface
columns: [
{
title: 'Types d'indicateurs',
dataIndex: 'itemTypeId',
key: 'itemTypeId',
width: 80,
scopedSlots: { customRender: 'itemTypeId' }
},
{
title: 'Nom de l'indicateur',
dataIndex: 'itemName',
key: 'itemName',
width: 120,
scopedSlots: { customRender: 'itemName' }
},
{
title: 'Type d'affichage',
dataIndex: 'dataShowingTypeId',
key: 'dataShowingTypeId',
width: 80,
scopedSlots: { customRender: 'dataShowingTypeId' }
},
{
title: 'Par défaut',
dataIndex: 'defaultValue',
key: 'defaultValue',
width: 80,
scopedSlots: { customRender: 'defaultValue' }
},
{ title: 'Unité', dataIndex: 'unit', key: 'unit', width: 80, scopedSlots: { customRender: 'unit' } },
{
title: 'PLCAdresse',
dataIndex: 'plcPlace',
key: 'plcPlace',
width: 80,
scopedSlots: { customRender: 'plcPlace' }
},
{
title: 'PLCType de données',
dataIndex: 'plcType',
key: 'plcType',
width: 100,
scopedSlots: { customRender: 'plcType' }
},
{
title: ' Observation ciblée ou non ',
dataIndex: 'isObservingItem',
key: 'isObservingItem',
width: 80,
scopedSlots: { customRender: 'isObservingItem' }
},
{
title: ' Surveillance de l'entretien ou non ',
dataIndex: 'isMaintainingItem',
key: 'isMaintainingItem',
width: 80,
scopedSlots: { customRender: 'isMaintainingItem' }
},
{
dataIndex: 'oper',
key: 'oper',
width: 80,
scopedSlots: { customRender: 'oper' },
slots: { title: 'operTitle' }
}
],//listChamps de la liste
deviceItemData: [],//Propriétés personnalisées, Contenu pour la production en vrac
selectedDeviceTypeId: ''//Propriétés personnalisées, Valeur utilisée pour enregistrer le contrôle personnalisé
}
},Methods Les codes ne sont pas affichés un par un ( Voir l'annexe pour plus de détails )
Il convient de noter ici que submitForm()Modification de:

4、Améliorer les idées
(1)saveBatch Une véritable mise en œuvre de l'enregistrement par lots peut être fournie dans le processus de grande concurrence ,Également disponible viaredis+mq Pour écrire de façon stable dans la base de données ( Évitez la base de données “Écris.”Blocage),Maintenant.mybatis-plusLe Code généré est“Cycle+Insérer”, Il doit y avoir un goulot d'étranglement d'écriture en cas de grande concurrence .
(2) La base de données est distribuée , Encore une fois, la séparation lecture - écriture , Améliore considérablement l'efficacité de la concurrence
(3) Bien que le Code frontal fonctionne , Mais c'est plus épais. ,Mauvais entretien, Peut être encapsulé sur la base du Code existant ,Y compris:js Encapsulation et Encapsulation d'un seul composant de fichier .
边栏推荐
- Simulation volume leetcode [general] 1061 Arrange the smallest equivalent strings in dictionary order
- 曼哈顿距离和-打印菱形
- 把el-tree选中的数组转换为数组对象
- Hypothesis testing learning notes
- 模拟卷Leetcode【普通】1314. 矩阵区域和
- 【Postman】测试(Tests)脚本编写和断言详解
- Still worrying about how to write web automation test cases? Senior test engineers teach you selenium test case writing hand in hand
- D - How Many Answers Are Wrong
- [postman] collections - run the imported data file of the configuration
- Simulation volume leetcode [general] 1314 Matrix area and
猜你喜欢
![[API interface tool] Introduction to postman interface](/img/03/c1541fca65dd726fd4bdc8793b605e.png)
[API interface tool] Introduction to postman interface

F - True Liars (种类并查集+DP)

Selenium source code read through · 9 | desiredcapabilities class analysis

【Postman】Collections-运行配置之导入数据文件

记一个基于JEECG-BOOT的比较复杂的增删改功能的实现

D - How Many Answers Are Wrong

Detailed explanation of P problem, NP problem, NPC problem and NP hard problem

JWT-JSON WEB TOKEN

技术分享 | 常见接口协议解析

Basic knowledge of MySQL
随机推荐
对数据安全的思考(转载)
MFC 动态创建的对话框及改变控件的大小和位置
这些年用Keil遇到的坑
Play video with Tencent video plug-in in uni app
[C language] qsort function
联合索引的左匹配原则
在JEECG-boot代码生成的基础上修改list页面(结合自定义的组件)
私人云盘部署
E - 食物链
模拟卷Leetcode【普通】1447. 最简分数
E - food chain
【Postman】Monitors 监测API可定时周期运行
On weak network test of special test
一文揭开,测试外包公司的真 相
[no app push general test plan
Basic knowledge of error
Basic knowledge of MySQL
模拟卷Leetcode【普通】1218. 最长定差子序列
模拟卷Leetcode【普通】1091. 二进制矩阵中的最短路径
【API接口工具】postman-界面使用介绍