当前位置:网站首页>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 .
边栏推荐
- Postman core function analysis - parameterization and test report
- 模拟卷Leetcode【普通】1314. 矩阵区域和
- 把el-tree选中的数组转换为数组对象
- leetcode 24. Exchange the nodes in the linked list in pairs
- LeetCode 729. 我的日程安排表 I
- 模拟卷Leetcode【普通】1249. 移除无效的括号
- Nodejs realizes the third-party login of Weibo
- 曼哈顿距离与曼哈顿矩形-打印回字型矩阵
- Understanding of processes and threads
- keil MDK中删除添加到watch1中的变量
猜你喜欢
随机推荐
Coordinatorlayout+nestedscrollview+recyclerview pull up the bottom display is incomplete
Construction and integration of Zipkin and sleuth for call chain monitoring
黑猫带你学eMMC协议第10篇:eMMC读写操作详解(read & write)
Understanding of processes and threads
win10无法操作(删除、剪切)文件
[no app push general test plan
F - True Liars (种类并查集+DP)
记一个基于JEECG-BOOT的比较复杂的增删改功能的实现
ESP32 ESP-IDF看门狗TWDT
对数据安全的思考(转载)
D - How Many Answers Are Wrong
The latest 2022 review of "graph classification research"
全链路压测:构建三大模型
LeetCode 731. 我的日程安排表 II
oscp raven2靶机渗透过程
模拟卷Leetcode【普通】1314. 矩阵区域和
Simulation volume leetcode [general] 1143 Longest common subsequence
【Postman】Collections配置运行过程
Simulation volume leetcode [general] 1218 Longest definite difference subsequence
org.activiti.bpmn.exceptions.XMLException: cvc-complex-type.2.4.a: 发现了以元素 ‘outgoing‘ 开头的无效内容