Java实现学生管理系统详解流程_第1页
Java实现学生管理系统详解流程_第2页
Java实现学生管理系统详解流程_第3页
Java实现学生管理系统详解流程_第4页
Java实现学生管理系统详解流程_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第Java实现学生管理系统详解流程目录学生管理系统项目介绍JavaSwing功能展示使用说明遇到的问题JavaWeb功能展示使用说明遇到的问题最后

学生管理系统

前言:这个是大二做的课设(还是学生管理系统),理论上虽然是4个人一组一起做的,但是,注意这个但是,还是我一个人承担了所有代码和文档基本都是我一个人写的,当初直接肝得吐血,这也是为啥后面的Web版部分功能没有完成的原因。

项目介绍

项目分为一个JavaSwing写的GUI桌面应用和一个半成品的Web应用,下图是项目的整体功能结构展示

JavaSwing

JavaSwing这里使用的是MyBatis+Spring的框架组合,后面发现使用Spring框架在Swing开发的程序上好像是一个错误。

另外,JavaSwing版里面可能还有一些逻辑上的未知bug。

功能展示

1、登录模块

2、系统设置模块

3、学生管理模块

学生添加

学生列表

4、班级管理模块

班级添加

班级管理

5、成绩管理

成绩统计

6、网页版

点击后可以跳转到浏览器的http://localhost:8080网址

使用说明

使用IDEA打开项目,项目的结构如下图:

启动项目的话就运行view包里面的LoginFrm

遇到的问题

使用Spring进行依赖注入遇到的问题

Swing是Java的一个进行GUI开发的包,在课设中我使用Spring对容器进行管理,但是在使用Spring注解进行容器依赖注入的时候出现了一个问题,依赖注入为null,报错如下:

ExceptioninthreadAWT-EventQueue-0java.lang.NullPointerException

atcom.view.LoginFrm.loginAct(LoginFrm.java:187)

atcom.view.LoginFrm$2.actionPerformed(LoginFrm.java:96)

在百度找了许久没找到问题所在,排除了Spring配置文件写错、或者是没加@Service注解等问题之后,我找到了网上的一个解释,如下:

在多线程时使用@Autowired总是获取不到bean。

原因是:newthread不在Spring容器中,也就无法获得Spring中的bean对象

JavaSwing不是线程安全的,项目中一些地方是多线程运行的,许多UI线程在里面并发运行,所以在这些线程里面使用Spring注入失败,因为它们不是Spring管理的线程

而Spring在多线程的情况下是不允许使用注解注入依赖的,所以我们只能手动get到我们想要的bean对象,代码如下:

privatefinalApplicationContextcontext=newClassPathXmlApplicationContext("spring.xml");

privatefinalAdminServiceadminService=(AdminServiceImpl)context.getBean("AdminServiceImpl");

其实还可以通过配置线程池的方法管理,但是Swing我又不太熟,不知道它运行时有哪几个线程。

这个问题是我当初没想到的,如果我知道的话就不会用Spring在Swing上面了因为自己每个view层的类上都要手动获取依赖,比其实跟自己使用一个单例模式获取MyBatis的依赖没啥区别,使用了Spring反而更麻烦了一些

Mybatis使用HashMap作为结果集出现的问题

在编写查找指定签到方法的时候,我使用了ListHashMapString,String作为返回值,但是它却显示错误,第一次是显示空指针错误,然后我配置了一下@Results结果集,如下:

@Results({

@Result(property=key,column=attendance_num,jdbcType=JdbcType.INTEGER),

@Result(property=value,column=attendance_date,jdbcType=JdbcType.VARCHAR)})

但是它显示格式转换错误,于是我在控制台输出了一下查询结果,发现结果是这样的

[{value=2025-05-17,key=1},{value=2025-04-17,key=1},{value=2025-04-18,key=1},{value=2025-04-19,key=3},{value=2025-04-20,key=1},{value=2025-04-21,key=1},{value=2025-05-03,key=1}]

HashMap里面的值从JSON字符串的形式变成了xxx=xxx的形式,property属性值对应的是实体类的属性,但是HashMap里面的key和vlaue并不能算属性(是我想错了),所以此时Mybatis就会自己设置一个属性名,于是就变成了上面的结果。别问为啥不用xml文件的形式,当时时间不太够,就直接贪方便用注解了

解决方法:

将上面的结果值重新处理一下,再赋给HashMap

删除带外键关联的数据时出现的问题

项目中Service层报错,如下:

Cannotdeleteorupdateaparentrow:aforeignkeyconstraintfails(`ttms`.`s_attendance`,CONSTRAINT`student_attendance_foreign`FOREIGNKEY(`student_id`)REFERENCES`s_student`(`id`));nestedexceptionisjava.sql.SQLIntegrityConstraintViolationException:Cannotdeleteorupdateaparentrow:aforeignkeyconstraintfails(`ttms`.`s_attendance`,CONSTRAINT`student_attendance_foreign`FOREIGNKEY(`student_id`)REFERENCES`s_student`(`id`))

查看了一下错误信息,问题出在Dao层,一条删除语句出现问题了,分析了一下原因,发现是设置了外键关联,这导致我们无法删除该条数据。

解决方法:

在删除数据前先设置外键无效,如下:

setforeign_key_checks=0;

然后此时可以执行删除语句了

删除完之后再设置外键有效,如下:

setforeign_key_checks=1;

这样就完美地删除了这条记录了。

JavaWeb

JavaWeb这里使用的是SpringBoot+SpringDataJPA的框架组合,页面是Thymeleaf进行数据展示的,页面上有一个统计页面使用了ECharts进行数据可视化。

前面说到Web是一个半成品,它已经实现了的功能主要有登录、退出登录、、修改密码、学生管理、班级管理、成绩管理的成绩统计这几个功能模块。另外,它用的数据库和JavaSwing版用的是同一个,所以它们之前的数据其实是互通的。

总结:尽管页面丑了点,但是它可以作为一个模板继续开发下去。

1、登录界面

2、学生管理

学生列表

学生添加

3、班级管理

班级列表

班级添加

4、成绩统计

项目结构图:

启动的话直接进入DemoApplication类里面右键启动就可以了。

遇到的问题

使用JPA更新数据库时遇到的问题

使用SpringDataJPA做Web端的持久化层的内容时,遇到了一个错误,如下:

Executinganupdate/deletequery

在百度查找一番之后,发现是JPA如果执行u

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论