当前位置:网站首页>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 .
边栏推荐
- ESP32 ESP-IDF看门狗TWDT
- LeetCode 739. 每日温度
- MFC 动态创建的对话框及改变控件的大小和位置
- 浅谈专项测试之弱网络测试
- Full link voltage measurement: building three models
- Selenium source code read through · 9 | desiredcapabilities class analysis
- selenium源码通读·9 |DesiredCapabilities类分析
- Réflexions sur la sécurité des données (réimpression)
- Hypothesis testing learning notes
- Thoughts on data security (Reprint)
猜你喜欢
Idea new UI usage
[postman] collections - run the imported data file of the configuration
【Postman】Collections配置运行过程
数据库-当前读与快照读
全链路压测:构建三大模型
MFC关于长字符串unsigned char与CString转换及显示问题
[postman] the monitors monitoring API can run periodically
D - How Many Answers Are Wrong
oscp raven2靶机渗透过程
Win10 cannot operate (delete, cut) files
随机推荐
模拟卷Leetcode【普通】1218. 最长定差子序列
Isam2 operation process
对数据安全的思考(转载)
Selenium source code read through · 9 | desiredcapabilities class analysis
全程实现单点登录功能和请求被取消报错“cancelToken“ of undefined的解决方法
Thoughts on data security (Reprint)
黑猫带你学UFS协议第18篇:UFS如何配置逻辑单元(LU Management)
职场进阶指南:大厂人必看书籍推荐
JDBC Requset 对应内容及功能介绍
Basic knowledge of MySQL
测试周期被压缩?教你9个方法去应对
SourceInsight Chinese garbled
Detailed explanation of P problem, NP problem, NPC problem and NP hard problem
全链路压测:构建三大模型
[postman] the monitors monitoring API can run periodically
数据库-当前读与快照读
Manage configuration using Nacos
Leaflet map
Cannot create PoolableConnectionFactory (Could not create connection to database server. 错误
[no app push general test plan