前書き: これは 2 年生向けに設計されたコースです (まだ学生管理システムです...)。 1人あたり4名です チームで協力して行いましたが、この「でも」に注意してください、コードとドキュメントのすべての責任は依然として私にあります... コードとドキュメントは基本的に一人で書きました。まず血を吐いていたのですが、これが後のWeb版の機能の一部が未完成の理由です。
#プロジェクトの概要プロジェクトは、JavaSwing で記述された GUI デスクトップ アプリケーションと、半完成の Web アプリケーションに分かれています。次の図は、プロジェクトの全体的な機能構造を示しています JavaSwingJavaSwing は MyBatis Spring フレームワークの組み合わせを使用しますが、Swing で開発されたプログラムでは Spring フレームワークを使用するのは間違いであることが後でわかりました。 さらに、JavaSwing バージョンにはいくつかの未知の論理的なバグが存在する可能性があります。 機能表示モジュール1. ログインモジュール 2. システム設定モジュール3. 学生管理モジュール学生追加 学生リスト 4.クラス管理モジュールクラス追加 クラス管理 5. スコア管理
スコア統計 6. Webバージョンクリックしてブラウザの
http://localhost:8080 URL にジャンプします
#使用方法
プロジェクトを開始したら、ビュー パッケージで LoginFrm を実行します
発生した問題
Swing は GUI 開発用の Java パッケージです。コースでは Spring を使用してコンテナを管理しました。しかし、コンテナの依存関係注入に Spring アノテーションを使用するときに問題が発生しました。依存関係の注入は null であり、エラーが次のように報告されました。
スレッド「AWT-EventQueue-0」java.lang.NullPointerExceptionat 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 @Results({ 削除後、次のように外部キーを有効に設定します: JavaWeb 前述したように、Web は半完成品であり、実装されている機能は主に、ログイン、ログアウト、パスワード変更、生徒管理、授業管理、成績管理などの機能モジュールです。さらに、使用するデータベースは JavaSwing のバージョンと同じであるため、以前のデータは実際に相互運用可能です。 概要: このページは少し見苦しいですが、開発を継続するためのテンプレートとして使用できます。 機能表示 2. 生徒管理 生徒リスト 生徒の追加 3. クラス管理 クラスリスト クラスの追加 4. スコア統計 使用説明書 #開始するには、DemoApplication クラスを右クリックして開始します。 更新/削除クエリの実行 Baidu で検索したところ、JPA であることがわかりました。更新または削除操作を実行すると、 Dao または Service を使用する必要があります @Transactional アノテーションがレイヤーに追加されます。これは、これがトランザクション レベルの操作であることを意味します。これは、JPA の使用仕様と同等です。JPA では、トランザクション サポートがなければ、更新および削除操作を実行できないためです。実行されました。
#しかし、フォーマット変換エラーが表示されたので、クエリ結果をコンソールに出力したところ、次のような結果になりました
@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; # この時点で削除ステートメントを実行できます。
この方法 この記録は完全に削除されました。
JavaWeb ここでは SpringBoot Spring Data JPA のフレームワークを組み合わせて使用します データの表示には Thymeleaf を使用します データの視覚化には ECharts を使用するページの統計ページがあります
1. ログインインターフェース
#プロジェクト構造図:
以上がJava で実装された学生管理システムのケースを分析します。の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。