ホームページ  >  記事  >  Java  >  Java で実装された学生管理システムのケースを分析します。

Java で実装された学生管理システムのケースを分析します。

WBOY
WBOY転載
2023-05-09 09:04:14804ブラウズ

    学生管理システム

    前書き: これは 2 年生向けに設計されたコースです (まだ学生管理システムです...)。 1人あたり4名です チームで協力して行いましたが、この「でも」に注意してください、コードとドキュメントのすべての責任は依然として私にあります... コードとドキュメントは基本的に一人で書きました。まず血を吐いていたのですが、これが後のWeb版の機能の一部が未完成の理由です。

    #プロジェクトの概要

    プロジェクトは、JavaSwing で記述された GUI デスクトップ アプリケーションと、半完成の Web アプリケーションに分かれています。次の図は、プロジェクトの全体的な機能構造を示しています

    Java で実装された学生管理システムのケースを分析します。

    JavaSwing

    JavaSwing は MyBatis Spring フレームワークの組み合わせを使用しますが、Swing で開発されたプログラムでは Spring フレームワークを使用するのは間違いであることが後でわかりました。

    さらに、JavaSwing バージョンにはいくつかの未知の論理的なバグが存在する可能性があります。

    機能表示モジュール

    1. ログインモジュール

    Java で実装された学生管理システムのケースを分析します。

    2. システム設定モジュール

    Java で実装された学生管理システムのケースを分析します。

    3. 学生管理モジュール

    学生追加

    Java で実装された学生管理システムのケースを分析します。

    学生リスト

    Java で実装された学生管理システムのケースを分析します。

    4.クラス管理モジュール

    クラス追加

    Java で実装された学生管理システムのケースを分析します。

    クラス管理

    Java で実装された学生管理システムのケースを分析します。

    5. スコア管理

    スコア統計

    Java で実装された学生管理システムのケースを分析します。

    6. Webバージョン

    クリックしてブラウザの

    http://localhost:8080 URL にジャンプします

    Java で実装された学生管理システムのケースを分析します。#使用方法

    IDEA を使用してプロジェクトを開きます。プロジェクトの構造は次のとおりです:

    Java で実装された学生管理システムのケースを分析します。プロジェクトを開始したら、ビュー パッケージで LoginFrm を実行します

    Java で実装された学生管理システムのケースを分析します。発生した問題

    依存関係の注入に Spring を使用するときに発生した問題

    Swing は GUI 開発用の Java パッケージです。コースでは Spring を使用してコンテナを管理しました。しかし、コンテナの依存関係注入に Spring アノテーションを使用するときに問題が発生しました。依存関係の注入は null であり、エラーが次のように報告されました。

    スレッド「AWT-EventQueue-0」java.lang.NullPointerException

    at com.view.LoginFrm.loginAct(LoginFrm.java:187)

    での例外

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

    Baidu で長い間検索しましたが、問題が見つかりませんでした。Spring 構成は除外しました。ファイルの記述が間違っているか、@Service アノテーションが追加されていないため、問題が発生するのを待っていたところ、インターネットで次のような説明を見つけました。

    理由は次のとおりです: 新しいスレッドが Spring コンテナ内にないため、Spring で Bean オブジェクトを取得できません

    JavaSwing はスレッドセーフではありません。プロジェクト内のいくつかの場所はマルチによって実行されます。 -スレッド、および多くの UI スレッド内部で同時に実行されるため、これらのスレッドは Spring で管理されるスレッドではないため、Spring インジェクションは失敗します。

    また、Spring では、マルチスレッド状況での依存関係の注入にアノテーションを使用することはできません。したがって、必要な Bean オブジェクトを取得するには、手動でのみ行うことができます。必要な Bean オブジェクトを取得するには、コードは次のとおりです。

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

    実際には、スレッド プールを構成することで管理することもできますが、Swing と don には詳しくありません。実行中にスレッドが何個あるかはわかりません。

    この問題は、私が最初は予期していなかったものでした。それを知っていたら、Spring on Swing を使用しなかっただろう...各ビュー層クラスの依存関係を手動で取得する必要があるためです。自分で使うよりずっと悪いです シングルトンモードで MyBatis の依存関係を取得することに違いはありませんが、Spring を使う方が面倒です

    Mybatis が HashMap を結果セットとして使用するときに発生する問題

    指定されたサインインを見つけるメソッドを作成するときに、戻り値として List> を使用しましたが、エラーが表示されました。最初に null ポインター エラーが表示されたとき、次に、@Results 結果セットを次のように構成しました。

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

    #しかし、フォーマット変換エラーが表示されたので、クエリ結果をコンソールに出力したところ、次のような結果になりました

    [{value=2018-05-17, key=1}, {value=2018-04-17, key=1}, {value=2018-04-18, key=1}, {value= 2018-04-19、キー=3}、{値=2018-04-20、キー=1}、{値=2018-04-21、キー=1}、{値=2018-05-03、キー= 1} ]

    HashMap の値は、JSON 文字列の形式から xxx=xxx の形式に変更されました。プロパティの属性値はエンティティ クラスの属性に対応しますが、キーと値は一致しません。 in HashMap では count.Attribute はカウントできないので(間違っていたと思いました)、この時 Mybatis が勝手に属性名を設定するので上記の結果になります。なぜ XML ファイルの形式ではないのかは聞かないでください。当時は十分な時間がなかったので、便宜的に注釈を使用しただけです。

    解決策:

    上記の結果値を HashMap に割り当てます。

    外部キーに関連付けられたデータを削除するときに発生する問題

    プロジェクトのサービス層は、次のようなエラーを報告します:

    親行を削除または更新できません: 外部キー制約が失敗します (`ttms`.`s_attendance`, CONSTRAINT `student_attendance_foreign` FOREIGN KEY (`student_id`) REFERENCES `s_student` (`id`)); ネストされた例外は java です。 sql.SQLIntegrityConstraintViolationException: 親行を削除または更新できません: 外部キー制約が失敗します (`ttms`.`s_attendance`、CONSTRAINT `student_attendance_foreign` FOREIGN KEY (`student_id`) REFERENCES `s_student` (`id`))

    エラー情報を確認してください。Dao 層に問題があります。削除ステートメントに問題があります。理由を分析したところ、外部キーの関連付けが設定されているため、削除できませんでした。データ。

    解決策:

    次のように、データを削除する前に外部キーを無効に設定します:

    setforeign_key_checks = 0;

    # この時点で削除ステートメントを実行できます。

    削除後、次のように外部キーを有効に設定します:

    setforeign_key_checks = 1;

    この方法 この記録は完全に削除されました。

    JavaWeb

    JavaWeb ここでは SpringBoot Spring Data JPA のフレームワークを組み合わせて使用​​します データの表示には Thymeleaf を使用します データの視覚化には ECharts を使用するページの統計ページがあります

    前述したように、Web は半完成品であり、実装されている機能は主に、ログイン、ログアウト、パスワード変更、生徒管理、授業管理、成績管理などの機能モジュールです。さらに、使用するデータベースは JavaSwing のバージョンと同じであるため、以前のデータは実際に相互運用可能です。

    概要: このページは少し見苦しいですが、開発を継続するためのテンプレートとして使用できます。

    機能表示

    1. ログインインターフェース

    Java で実装された学生管理システムのケースを分析します。2. 生徒管理

    生徒リスト

    Java で実装された学生管理システムのケースを分析します。生徒の追加

    Java で実装された学生管理システムのケースを分析します。3. クラス管理

    クラスリスト

    Java で実装された学生管理システムのケースを分析します。クラスの追加

    Java で実装された学生管理システムのケースを分析します。4. スコア統計

    Java で実装された学生管理システムのケースを分析します。

    Java で実装された学生管理システムのケースを分析します。

    Java で実装された学生管理システムのケースを分析します。使用説明書

    #プロジェクト構造図:

    #開始するには、DemoApplication クラスを右クリックして開始します。 Java で実装された学生管理システムのケースを分析します。

    発生した問題

    JPA を使用してデータベースを更新するときに発生した問題

    Spring Data JPA を使用して Web 側で永続層のコンテンツを実行すると、エラーが発生しました。

    更新/削除クエリの実行

    Baidu で検索したところ、JPA であることがわかりました。更新または削除操作を実行すると、 Dao または Service を使用する必要があります @Transactional アノテーションがレイヤーに追加されます。これは、これがトランザクション レベルの操作であることを意味します。これは、JPA の使用仕様と同等です。JPA では、トランザクション サポートがなければ、更新および削除操作を実行できないためです。実行されました。

    以上がJava で実装された学生管理システムのケースを分析します。の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

    声明:
    この記事はyisu.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。