分析Java實現的學生管理系統案例。
學生管理系統
#前言:這個是大二做的課設(還是學生管理系統…),理論上雖然是4個人一組一起做的,但是,注意這個“但是”,還是我一個人承擔了所有…代碼和文檔基本都是我一個人寫的,當初直接肝得吐血,這也是為啥後面的Web 版部分功能沒有完成的原因。
專案介紹
專案分成一個JavaSwing寫的GUI桌面應用程式和一個半成品的網路應用,下圖是專案的整體功能結構展示
JavaSwing
JavaSwing這裡使用的是MyBatis Spring 的框架組合,後面發現使用Spring 框架在Swing 開發的程式上好像是個錯誤。
另外,JavaSwing 版裡面可能還有一些邏輯上的未知 bug。
功能展示
1、登入模組
#2、系統設定模組
3、學生管理模組
學生添加
#學生列表
4、班級管理模組
班級新增
班級管理
成績統計
http://localhost:8080 網址
##啟動專案的話就執行view 套件裡面的LoginFrm
#遇到的問題
使用Spring進行依賴注入遇到的問題
Swing 是Java 的一個進行GUI 開發的包,在課設中我使用Spring 對容器進行管理,但是在使用Spring 註解進行容器依賴注入的時候出現了一個問題,依賴注入為null,報錯如下:
Exception in thread “AWT-EventQueue-0” java.lang.NullPointerExceptionat com.view.LoginFrm.loginAct(LoginFrm.java:187)
# at com.view.LoginFrm$2.actionPerformed(LoginFrm.java:96)
在百度找了許久沒找到問題所在,排除了Spring 設定檔寫錯、或者是沒加@Service 註解等問題之後,我找到了網路上的解釋,如下:
在多執行緒時使用@Autowired 總是取得不到bean。
原因是:new thread 不在Spring 容器中,也就無法獲得Spring 中的bean 物件
JavaSwing 不是線程安全的,專案中一些地方是多線程運行的,許多UI 線程在裡面並發運行,所以在這些線程裡面使用Spring 注入失敗,因為它們不是Spring 管理的線程
而Spring在多線程的情況下是不允許使用註解注入依賴的,所以我們只能手動get到我們想要的bean對象,程式碼如下:
private final ApplicationContext context = new ClassPathXmlApplicationContext("spring.xml"); private final AdminService adminService = (AdminServiceImpl)context.getBean("AdminServiceImpl");
其實還可以透過設定線程池的方法管理,但是Swing 我又不太熟,不知道它運行時有哪幾個線程。
這個問題是我當初沒想到的,如果我知道的話就不會用Spring 在Swing 上面了…因為自己每個view 層的類別上都要手動獲取依賴,比其實跟自己使用一個單例模式取得MyBatis 的依賴沒啥區別,使用了Spring 反而更麻煩了一些
Mybatis使用HashMap作為結果集出現的問題
在編寫查找指定簽到方法的時候,我使用了List
@Results({
@Result(property = "key",column = "attendance_num",jdbcType = JdbcType.INTEGER),
@Result(property = "value",column = " attendance_date",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, key=3}, {value=2018-04-20, key=1}, {value=2018-04-21, key=1}, {value=2018-05-03, key=1} ]
HashMap裡面的值從JSON字串的形式變成了xxx=xxx的形式,property屬性值對應的是實體類別的屬性,但是HashMap裡面的key和vlaue並不能算屬性(是我想錯了),所以此時Mybatis就會自己設定一個屬性名,於是就變成了上面的結果。別問為啥不用xml檔案的形式,當時時間不太夠,就直接貪方便用註解了
#解決方法:
#將上面的結果值重新處理一下,再賦給HashMap
刪除帶外鍵關聯的資料時出現的問題
專案中Service層報錯,如下:
Cannot delete or update a parent row: a foreign key constraint fails (`ttms`.`s_attendance`, CONSTRAINT `student_attendance_foreign` FOREIGN KEY (`student_id`) REFERENCES `s_student` (`id`)); pernotone exception SQLe. row: a foreign key constraint fails (`ttms`.`s_attendance`, CONSTRAINT `student_attendance_foreign` FOREIGN KEY (`student_id`) REFERENCES `s_student` (`id`))
##錯誤錯誤訊息,問題出在Dao層,一條刪除語句出現問題了,分析了一下原因,發現是設定了外鍵關聯,這導致我們無法刪除該條資料。
解決方法:
在刪除資料前先設定外鍵無效,如下:
set foreign_key_checks = 0;
#然後此時可以執行刪除語句了
刪除完之後再設定外鍵有效,如下:
##這樣就完美地刪除了這條記錄了。 JavaWebJavaWeb 這裡使用的是 SpringBoot Spring Data JPA 的框架組合,頁面是 Thymeleaf 進行資料展示的,頁面上有一個統計頁面使用了 ECharts 進行資料視覺化。 前面說到 Web 是一個半成品,它已經實現了的功能主要有登入、登出登入、、修改密碼、學生管理、班級管理、成績管理的成績統計這幾個功能模組。另外,它用的資料庫和 JavaSwing 版用的都是同一個,所以它們之前的資料其實是互通的。 總結:儘管頁面醜了點,但是它可以作為一個模板繼續開發下去。 功能展示1、登入介面set foreign_key_checks = 1;
#啟動的話直接進入DemoApplication 類別裡面右鍵啟動就可以了。
遇到的問題
###使用JPA更新資料庫時遇到的問題######使用Spring Data JPA 做Web 端的持久化層的內容時,遇到了一個錯誤,如下:#########Executing an update/delete query#########在百度查找一番之後,發現是JPA 如果執行update 或delete 等操作時,要在Dao 或Service層加上@Transactiona l註解,代表這是一個事務層級的操作,這相當於JPA 的一個使用規範吧,因為JPA 要求,’沒有事務支持,不能執行更新和刪除操作。 ###以上是分析Java實現的學生管理系統案例。的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

Java 8引入了Stream API,提供了一種強大且表達力豐富的處理數據集合的方式。然而,使用Stream時,一個常見問題是:如何從forEach操作中中斷或返回? 傳統循環允許提前中斷或返回,但Stream的forEach方法並不直接支持這種方式。本文將解釋原因,並探討在Stream處理系統中實現提前終止的替代方法。 延伸閱讀: Java Stream API改進 理解Stream forEach forEach方法是一個終端操作,它對Stream中的每個元素執行一個操作。它的設計意圖是處

PHP是一種廣泛應用於服務器端的腳本語言,特別適合web開發。 1.PHP可以嵌入HTML,處理HTTP請求和響應,支持多種數據庫。 2.PHP用於生成動態網頁內容,處理表單數據,訪問數據庫等,具有強大的社區支持和開源資源。 3.PHP是解釋型語言,執行過程包括詞法分析、語法分析、編譯和執行。 4.PHP可以與MySQL結合用於用戶註冊系統等高級應用。 5.調試PHP時,可使用error_reporting()和var_dump()等函數。 6.優化PHP代碼可通過緩存機制、優化數據庫查詢和使用內置函數。 7

PHP和Python各有優勢,選擇應基於項目需求。 1.PHP適合web開發,語法簡單,執行效率高。 2.Python適用於數據科學和機器學習,語法簡潔,庫豐富。

PHP適合web開發,特別是在快速開發和處理動態內容方面表現出色,但不擅長數據科學和企業級應用。與Python相比,PHP在web開發中更具優勢,但在數據科學領域不如Python;與Java相比,PHP在企業級應用中表現較差,但在web開發中更靈活;與JavaScript相比,PHP在後端開發中更簡潔,但在前端開發中不如JavaScript。

膠囊是一種三維幾何圖形,由一個圓柱體和兩端各一個半球體組成。膠囊的體積可以通過將圓柱體的體積和兩端半球體的體積相加來計算。本教程將討論如何使用不同的方法在Java中計算給定膠囊的體積。 膠囊體積公式 膠囊體積的公式如下: 膠囊體積 = 圓柱體體積 兩個半球體體積 其中, r: 半球體的半徑。 h: 圓柱體的高度(不包括半球體)。 例子 1 輸入 半徑 = 5 單位 高度 = 10 單位 輸出 體積 = 1570.8 立方單位 解釋 使用公式計算體積: 體積 = π × r2 × h (4

PHP和Python各有優勢,適合不同場景。 1.PHP適用於web開發,提供內置web服務器和豐富函數庫。 2.Python適合數據科學和機器學習,語法簡潔且有強大標準庫。選擇時應根據項目需求決定。

Java是熱門程式語言,適合初學者和經驗豐富的開發者學習。本教學從基礎概念出發,逐步深入解說進階主題。安裝Java開發工具包後,可透過建立簡單的「Hello,World!」程式來實踐程式設計。理解程式碼後,使用命令提示字元編譯並執行程序,控制台上將輸出「Hello,World!」。學習Java開啟了程式設計之旅,隨著掌握程度加深,可創建更複雜的應用程式。

PHP成為許多網站首選技術棧的原因包括其易用性、強大社區支持和廣泛應用。 1)易於學習和使用,適合初學者。 2)擁有龐大的開發者社區,資源豐富。 3)廣泛應用於WordPress、Drupal等平台。 4)與Web服務器緊密集成,簡化開發部署。
