一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - Java實現學生管理系統詳解

Java實現學生管理系統詳解

2022-02-20 11:35小關同學喜歡吃漢堡 Java教程

這篇文章主要為大家詳細介紹了Java實現學生管理系統,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助

學生管理系統(Java版)

前言:這個是大二做的課設(還是學生管理系統…),理論上雖然是4個人一組一起做的,但是,注意這個“但是”,還是我一個人承擔了所有…代碼和文檔基本都是我一個人寫的,當初直接肝得吐血,這也是為啥后面的 Web 版部分功能沒有完成的原因。

項目介紹

項目分為一個JavaSwing寫的GUI桌面應用和一個半成品的Web應用,下圖是項目的整體功能結構展示

Java實現學生管理系統詳解

JavaSwing

JavaSwing這里使用的是 MyBatis + Spring 的框架組合,后面發現使用 Spring 框架在 Swing 開發的程序上好像是一個錯誤。
另外,JavaSwing 版里面可能還有一些邏輯上的未知 bug。

功能展示(部分)

1、登錄模塊

Java實現學生管理系統詳解

2、系統設置模塊

Java實現學生管理系統詳解

3、學生管理模塊

學生添加

Java實現學生管理系統詳解

學生列表

Java實現學生管理系統詳解

4、班級管理模塊

班級添加

Java實現學生管理系統詳解

班級管理

Java實現學生管理系統詳解

5、成績管理

成績統計

Java實現學生管理系統詳解

6、網頁版

點擊后可以跳轉到瀏覽器的 http://localhost:8080 網址

Java實現學生管理系統詳解

使用說明

使用 IDEA 打開項目,項目的結構如下圖:

Java實現學生管理系統詳解

啟動項目的話就運行 view 包里面的 LoginFrm

Java實現學生管理系統詳解

遇到的問題

使用Spring進行依賴注入遇到的問題

Swing 是 Java 的一個進行 GUI 開發的包,在課設中我使用 Spring 對容器進行管理,但是在使用 Spring 注解進行容器依賴注入的時候出現了一個問題,依賴注入為 null,報錯如下:

Exception in thread “AWT-EventQueue-0” java.lang.NullPointerException

at 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<HashMap<String,String>>作為返回值,但是它卻顯示錯誤,第一次是顯示空指針錯誤,然后我配置了一下@Results結果集,如下:

@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`)); nested exception is java.sql.SQLIntegrityConstraintViolationException: 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`))

查看了一下錯誤信息,問題出在Dao層,一條刪除語句出現問題了,分析了一下原因,發現是設置了外鍵關聯,這導致我們無法刪除該條數據。

解決方法:

在刪除數據前先設置外鍵無效,如下:

set foreign_key_checks = 0;

然后此時可以執行刪除語句了
刪除完之后再設置外鍵有效,如下:

set foreign_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實現學生管理系統詳解

使用說明

項目結構圖:

Java實現學生管理系統詳解

啟動的話直接進入 DemoApplication 類里面右鍵啟動就可以了。

遇到的問題

使用JPA更新數據庫時遇到的問題

使用 Spring Data JPA 做 Web 端的持久化層的內容時,遇到了一個錯誤,如下:

Executing an update/delete query

在百度查找一番之后,發現是 JPA 如果執行 update 或 delete 等操作時,要在 Dao 或者 Service 層加上 @Transactiona l注解,代表這是一個事務級別的操作,這相當于 JPA 的一個使用規范吧,因為 JPA 要求,"沒有事務支持,不能執行更新和刪除操作"。

 

總結

本篇文章就到這里了,希望能夠給你帶來幫助,也希望您能夠多多關注服務器之家的更多內容!

原文鏈接:https://blog.csdn.net/weixin_45784666/article/details/120611591

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 乌克兰肥熟 | 日本一区二区三区在线 视频 | 国产福利不卡视频 | 91桃色视频 | 丝瓜香蕉视频 | 奇米网狠狠网 | 高h喷水荡肉爽文np肉色文 | 国产精品拍拍拍福利在线观看 | 8x8x极品国产在线 | 青春娱乐国产分类精品二 | 无码精品一区二区三区免费视频 | 2019理论韩国理论中文 | 婷婷综合久久 | 无敌秦墨漫画免费阅读 | 欧美日韩国产一区二区三区不卡 | 成年人视频在线播放 | 日本中文字幕一区二区三区不卡 | 国产性做久久久久久 | 色先锋av资源中文字幕 | 欧美在线成人免费国产 | 国产成人高清视频 | 国产毛片在线高清视频 | 国产欧美曰韩一区二区三区 | 亚洲人成绝费网站色ww | 99久久99久久免费精品蜜桃 | 亚洲haose在线观看 | 午夜香蕉成视频人网站高清版 | 2020韩国三级理论在线观看 | 美女撒尿无遮挡免费中国 | 国产va免费精品高清在线 | 2020年最新国产精品视频免费 | 国产精品免费_区二区三区观看 | 小便japanesewctv| 女海盗斯蒂内塔的复仇2免费观看 | 亚洲国产欧美在线人网站 | 免费观看在线aa | 国产剧情在线播放 | 欧洲第一页 | 亚洲精品成人456在线播放 | 9999热视频 | 男人叼女人的痛爽视频免费 |