当前位置:网站首页>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] collections - run the imported data file of the configuration
- Testing and debugging of multithreaded applications
- Aike AI frontier promotion (2.13)
- Selenium source code read through · 9 | desiredcapabilities class analysis
- 模拟卷Leetcode【普通】1414. 和为 K 的最少斐波那契数字数目
- 模拟卷Leetcode【普通】1405. 最长快乐字符串
- 数据库-当前读与快照读
- 【API接口工具】postman-界面使用介绍
- Simulation volume leetcode [general] 1314 Matrix area and
- JWT-JSON WEB TOKEN
猜你喜欢
【Tera Term】黑猫带你学TTL脚本——嵌入式开发中串口自动化神技能
Manhattan distance sum - print diamond
F - True Liars (种类并查集+DP)
【Postman】Collections-运行配置之导入数据文件
[C language] string left rotation
[postman] test script writing and assertion details
私人云盘部署
Avtiviti创建表时报错:Error getting a new connection. Cause: org.apache.commons.dbcp.SQLNestedException
[no app push general test plan
MFC on the conversion and display of long string unsigned char and CString
随机推荐
浅谈专项测试之弱网络测试
黑猫带你学eMMC协议第10篇:eMMC读写操作详解(read & write)
Aike AI frontier promotion (2.13)
黑猫带你学UFS协议第18篇:UFS如何配置逻辑单元(LU Management)
进程和线程的理解
基于JEECG-BOOT的list页面的地址栏参数传递
How to extract login cookies when JMeter performs interface testing
【无App Push 通用测试方案
还在为如何编写Web自动化测试用例而烦恼嘛?资深测试工程师手把手教你Selenium 测试用例编写
QT: the program input point xxxxx cannot be located in the dynamic link library.
Idea new UI usage
Simulation volume leetcode [general] 1219 Golden Miner
LeetCode 731. 我的日程安排表 II
【Postman】动态变量(也称Mock函数)
MySQL之基础知识
10M25DCF484C8G(FPGA) AMY-6M-0002 BGA GPS模块
【Postman】Collections配置运行过程
leaflet 地图
曼哈顿距离和-打印菱形
Simulation volume leetcode [general] 1296 Divide an array into a set of consecutive numbers