Maison  >  Article  >  Java  >  Analyser le cas d'un système de gestion des étudiants implémenté en Java.

Analyser le cas d'un système de gestion des étudiants implémenté en Java.

WBOY
WBOYavant
2023-05-09 09:04:14741parcourir

"Système de gestion des étudiants" mais", ou j'étais responsable de tout le code et des documents par moi-même. Au début, j'étais tellement bouleversé que j'ai vomi du sang. C'est aussi la raison pour laquelle certaines fonctions de la version Web ultérieure n'ont pas été complétées.

      Introduction au projet
Le projet est divisé en une application de bureau GUI écrite en JavaSwing et une application Web semi-finie. L'image suivante montre la structure fonctionnelle globale du projet

JavaSwing

JavaSwing utilise MyBatis +. Framework Spring ici Après combinaison, j'ai découvert plus tard que l'utilisation du framework Spring semble être une erreur dans les programmes développés avec Swing.

De plus, il peut y avoir des bugs logiques inconnus dans la version JavaSwing. Analyser le cas dun système de gestion des étudiants implémenté en Java.

Affichage des fonctions

1. Module de connexion

2. Module de configuration du système

Analyser le cas dun système de gestion des étudiants implémenté en Java.3.

4. Gestion de classe Module

Analyser le cas dun système de gestion des étudiants implémenté en Java.Ajout de classe

Gestion de classe

Analyser le cas dun système de gestion des étudiants implémenté en Java.

5, Gestion des notes

Analyser le cas dun système de gestion des étudiants implémenté en Java.Statistiques de note

6, Version Web

Analyser le cas dun système de gestion des étudiants implémenté en Java.Cliquez pour accéder au navigateur

Analyser le cas dun système de gestion des étudiants implémenté en Java.

Instructions

Utilisez IDEA pour ouvrir le projet. La structure du projet est la suivante :

Analyser le cas dun système de gestion des étudiants implémenté en Java.

Lorsque vous démarrez le projet, exécutez LoginFrm dans le package de vue

http://localhost:8080 网址

Problèmes rencontrés

Analyser le cas dun système de gestion des étudiants implémenté en Java.Rencontrés lors de l'utilisation de Spring pour l'injection de dépendances. Problème

Swing est un package Java pour le développement d'interfaces graphiques. Dans le cours, j'utilise Spring pour gérer le conteneur, mais un problème se produit lors de l'utilisation des annotations Spring pour l'injection de dépendances du conteneur. L'injection de dépendances est nulle et l'erreur est la suivante :

Exception dans le fil de discussion « AWT-EventQueue-0 » java.lang.NullPointerException

Analyser le cas dun système de gestion des étudiants implémenté en Java.à com.view.LoginFrm.loginAct(LoginFrm.java:187)

à com.view.LoginFrm$2.actionPerformed(LoginFrm.java :96)

Analyser le cas dun système de gestion des étudiants implémenté en Java.Après une longue recherche sur Baidu, je n'ai pas trouvé le problème. Après avoir exclu le problème d'une mauvaise écriture du fichier de configuration Spring ou de la non-ajout de l'annotation @Service, j'ai trouvé une explication sur Internet. , comme suit :

En multi-threading Lors de l'utilisation de @Autowired, le bean ne peut pas être obtenu.

La raison est la suivante : le nouveau thread n'est pas dans le conteneur Spring, il ne peut donc pas obtenir l'objet bean dans Spring

JavaSwing n'est pas thread-safe Certains endroits du projet sont multithread et de nombreux threads d'interface utilisateur s'exécutent simultanément. dedans, donc dans ces injections utilisant Spring dans les threads échoue car ce ne sont pas des threads gérés par Spring

Et Spring ne permet pas l'utilisation d'annotations pour injecter des dépendances dans des situations multithread, nous ne pouvons donc obtenir que manuellement l'objet bean que nous je veux, le code est le suivant :

private final ApplicationContext context = new ClassPathXmlApplicationContext("spring.xml");
private final AdminService adminService = (AdminServiceImpl)context.getBean("AdminServiceImpl");

En fait, il peut aussi être géré en configurant le pool de threads, mais je ne connais pas Swing et je ne sais pas combien de threads il a lors de son exécution.

Ce problème était quelque chose auquel je ne m'attendais pas au début. Si je l'avais su, je n'aurais pas utilisé Spring sur Swing... car je dois obtenir manuellement les dépendances pour chaque classe de couche de vue, ce qui est bien pire que en utilisant moi-même un mode singleton, il n'y a aucune différence dans l'obtention des dépendances de MyBatis, mais utiliser Spring est plus gênant

Problèmes avec Mybatis utilisant HashMap comme jeu de résultats

Lors de l'écriture de la méthode pour trouver la connexion spécifiée, j'ai utilisé. List> ; comme valeur de retour, mais une erreur s'est affichée pour la première fois, puis j'ai configuré le jeu de résultats @Results comme suit :

@Results({
@Result(property = "key",column = "attendance_num",jdbcType = JdbcType.INTEGER),
@Result(property = "value",column = "attendance_date",jdbcType = JdbcType.VARCHAR )})

Mais une erreur de conversion de format s'est affichée. J'ai donc affiché les résultats de la requête sur la console et j'ai découvert que les résultats ressemblaient à ceci

[{value=2018-05-17, key=1}, { valeur = 17/04/2018, clé = 1}, {value = 18/04/2018, clé = 1}, {value = 19/04/2018, clé = 3}, {value = 20/04/2018, key= 1}, {value=2018-04-21, key=1}, {value=2018-05-03, key=1}]

La valeur dans HashMap est passée de la forme de chaîne JSON à xxx =xxx Sous la forme du résultat ci-dessus. Ne demandez pas pourquoi vous n'utilisez pas le fichier XML. Je n'avais pas assez de temps à ce moment-là, j'ai donc simplement utilisé des annotations pour plus de commodité. Solution :

Retraitez la valeur du résultat ci-dessus et attribuez-la à HashMap

Supprimer. l'association avec les clés étrangères Problèmes qui surviennent lors de l'extraction des données

La couche Service du projet signale les erreurs suivantes :

Impossible de supprimer ou de mettre à jour une ligne parent : une contrainte de clé étrangère échoue (`ttms`.`s_attendance`, CONSTRAINT `student_attendance_foreign` FOREIGN KEY (`student_id `) RÉFÉRENCES `s_student` (`id`)); l'exception imbriquée est java.sql.SQLIntegrityConstraintViolationException : impossible de supprimer ou de mettre à jour une ligne parent : une contrainte de clé étrangère échoue (`ttms`.`s_attendance `, CONTRAINTE `student_attendance_foreign` FOREIGN KEY (`student_id`) RÉFÉRENCES `s_student` (`id`))

J'ai vérifié le message d'erreur et j'ai découvert que le problème venait de la couche Dao. Il y avait un problème avec une instruction de suppression. . Après avoir analysé la raison, j'ai découvert qu'une association de clé étrangère avait été définie. Cela nous empêche de supprimer les données.

Solution :

Définissez la clé étrangère pour qu'elle soit invalide avant de supprimer les données, comme suit :

set Foreign_key_checks = 0;

Ensuite, vous pouvez exécuter l'instruction de suppression à ce moment-là

Après la suppression, définissez la clé étrangère key pour être valide, comme suit :

set Foreign_key_checks = 1;

Cela supprimera parfaitement cet enregistrement.

JavaWeb

JavaWeb La combinaison de framework SpringBoot + Spring Data JPA est utilisée ici. La page utilise Thymeleaf pour l'affichage des données. Il y a une page de statistiques sur la page qui utilise ECharts pour la visualisation des données.

Comme mentionné précédemment, le Web est un produit semi-fini. Les fonctions qu'il a implémentées incluent principalement les modules fonctionnels suivants : connexion, déconnexion, changement de mot de passe, gestion des étudiants, gestion des classes et gestion des scores. De plus, la base de données qu'il utilise est la même que la version JavaSwing, donc leurs données précédentes sont réellement interopérables.

Résumé : Bien que la page soit un peu moche, elle peut être utilisée comme modèle pour un développement continu.

Affichage des fonctions

1. Interface de connexion

Analyser le cas dun système de gestion des étudiants implémenté en Java.2. Gestion des étudiants

Liste des étudiants

Ajout des étudiantsAnalyser le cas dun système de gestion des étudiants implémenté en Java.

3. Analyser le cas dun système de gestion des étudiants implémenté en Java.

Classe ajoutée

Analyser le cas dun système de gestion des étudiants implémenté en Java.

Analyser le cas dun système de gestion des étudiants implémenté en Java.

4. Respecter les statistiques 说 Utiliser la description

Analyser le cas dun système de gestion des étudiants implémenté en Java. Diagramme de la structure du projet :

Analyser le cas dun système de gestion des étudiants implémenté en Java.

Mettez directement dans la classe DemoApplication et faites un clic droit pour démarrer. Analyser le cas dun système de gestion des étudiants implémenté en Java.

Problèmes rencontrés

Problèmes rencontrés lors de l'utilisation de JPA pour mettre à jour la base de données

Lors de l'utilisation de Spring Data JPA pour faire le contenu de la couche de persistance côté Web, une erreur a été rencontrée, comme suit :

Analyser le cas dun système de gestion des étudiants implémenté en Java.

Exécution d'une mise à jour/ requête de suppression

Après une recherche sur Baidu, j'ai trouvé qu'il s'agissait de JPA Lors de l'exécution d'opérations de mise à jour ou de suppression, l'annotation @Transactional doit être ajoutée à la couche Dao ou Service, ce qui signifie qu'il s'agit d'une opération au niveau de la transaction, ce qui signifie qu'il s'agit d'une opération de suppression. équivaut à une utilisation de JPA Pour être précis, en raison des exigences de JPA, sans prise en charge des transactions, les opérations de mise à jour et de suppression ne peuvent pas être effectuées.

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:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer