实验06《基于Spring+MyBatis+JavaFX框架的教学管理程序》的设计与实现.docx
《实验06《基于Spring+MyBatis+JavaFX框架的教学管理程序》的设计与实现.docx》由会员分享,可在线阅读,更多相关《实验06《基于Spring+MyBatis+JavaFX框架的教学管理程序》的设计与实现.docx(12页珍藏版)》请在冰豆网上搜索。
实验06《基于Spring+MyBatis+JavaFX框架的教学管理程序》的设计与实现
实验06、《基于Spring+MyBatis+JavaFX框架的教学管理程序》的设计与实现
一、实验说明
上一个实验使用MyBatis框架改写了教学管理程序的底层——Mapper层。
这次的实验将在上一个实验的基础上,使用Spring框架整合MyBatis和JavaFX。
Spring是一个管理和维护javaBean的容器,因此,本实验涉及到的绝大多数对象都要被Spring容器抢走或接管。
1)JavaFx的Controller层被Spring容器接管
2)Service(Biz)层的各个类被Spring容器接管
3)MyBatis的Mapper(Dao)层接口,被Spring容器抢走
4)MyBatis的Mapper.xml,也被Spring容器抢走
5)MyBatis核心操作对象SqlSession的bean工厂SqlSessionFactory被Spring容器抢走
二、实验准备
1、下载、安装、配置好mysql-8.0.12-winx64和Navicat。
不赘述
2、下载、解压好mysql的jdbc驱动mysql-connector-java-8.0.12,并导入项目中。
不赘述。
3、下载、解压好连接池commons-dbcp2-2.5.0和其依赖包commons-logging-1.2和commons-pool2-2.6.0,并导入项目中。
不赘述。
4、下载、解压好mybatis-3.4.6,并导入项目中。
不赘述。
5、下载、解压好spring-framework-5.1.1.RELEASE。
进入lib文件夹,里面的每一个jar包都是spring框架的组件jar包,这里的组件jar包很多,为了管理方便,项目将该组jar包以userlibrary的形式导入,如下所示:
然后一路Ok、Apply或finish就导入了spring5.1.1。
6、下载、解压好spring整合mybatis的jar包mybatis-spring-1.3.2,并导入项目中。
至此,本项目使用的第三方jar包导入完毕。
如下所示:
三、整合过程
整个整合过程基本上就是spring抢bean的过程。
下面只列出和实验05相比,发生变化的部分。
1、resource目录
(1)修改mysql.properties
增加连接池dbcp2的配置,如下所示
(2)修改mybatis-config.xml
本来mybatis-config中配置了typeAliases、datasource、mapper等内容,但datasource、mapper会被spring抢走,因此只剩下typeAliases。
如下所示:
(3)增加spring核心配置文件:
spring-context.xml
Spring-context.xml文件里面要写两套配置:
1spring自身配置;2抢过来的bean配置。
参考代码如下:
A)抢走数据库配置
B)抢走生产sqlSession的bean工厂sqlSessionFactory,顺带抢走了mapper.xml和mapper接口类对象
C)spring自身的配置
(4)resource/mapper文件夹里面的内容不变
2、exception包不变
3、util包
(1)删除获得mybatis核心操作对象sqlSession的类DBUtil
因为sqlSession被Spring抢走了,由Spring接管对它的管理和维护。
(2)增加SpringFxmlLoader类
由于javaFx的controller将由spring接管,那么前期使用FXMLLoader类加载FXML界面文件的方式要修改。
SpringFxmlLoader类的参考代码如下:
其中,该类中的JavaFXAppMain.APPLICATION_CONTEXT在入口类中定义并赋值,见本文档最后。
之后将利用SpringFxmlLoader来加载fxml文件。
4、domain、domain.wrapper不变
5、mapper层
使用注解创建组件对象。
组件对象的注解有四种:
@Component、@Repository、@Service、@Controller,用在类或接口上,分别表示创建组件、创建数据操作层组件、创建服务层组件、创建控制器层组件。
目前,spring对这四者没有区别,都通用。
但是,作为一个优雅的Javaer,还是需要严格区分的,建议不同的层次使用不同的注解。
如在StudentMapper接口类上,添加注解@Repository,在程序运行过程中,spring就会创建一个StudentMapper类型的对象,该接口由studentMapper.xml实现,因此创建的对象事实上是实现类(这里是studentMapper.xml)的对象。
如果不指定对象名字,spring则会按类型查找。
单例模式下,不需指定对象名字;非单例模式下,可以指定名字,如@Repository(“studentMapper”)。
如果要在service层注入该对象,没指定名字的条件下,直接使用注解@Autowired,按类型查找;如果指定了名字,则使用@Autowired@Qualifier("studentMapper")两个注解修饰。
下面是StudentMapper接口添加接口后的参考代码。
只是添加了注解,其他都没变。
mapper层的其他接口UserMapper、CourseMapper、GradeMapper同样处理即可。
6、service层
这一层,之前项目一直使用”biz”的名称,但在Spring框架中,这一层称为service,因此,本项目将该层重命名为service,该层的类重命名为以”Service”结尾,如StudentService。
首先,Service层依赖于mapper层,因此,要向service注入需要的mapper;第二,之前使用的sqlSession由于被spring接管,因此,不再需要sqlSession,删除即可;第三,之前该类的构造方法,是利用sqlSession的getMapper方法获得各个mapper,并初始化ObservableList,现在的mapper对象被spring接管,不需要getMapper了,还有ObservableList的初始化需要mapper,而这时service还不存在,也就不会存在mapper,因此,删除该构造方法,ObservableList的初始化工作不再使用构造方法,而使用一个显式方法,如setStudObservList来完成。
因此,以下是StudentService的参考代码(部分):
CourseService差不多
GradeService也差不多,参考代码如下:
7、controller层
这一层是JavaFX的控制器层。
(1)增加@Controller注解
该层除了抽象基类EditController不需要加@Controller注解外,每个类将增加注解@Controller,交由Spring接管。
都是单例模式,根据类型注入。
因此,不需要指定name。
(2)使用SpringFxmlLoader类加载fxml界面
切换到另一个界面使用类似于这两句就可以了,如启动主界面的方法如下:
(3)在MainViewController的initialize方法中加载各个表数据
显示MainView时,需要从数据库中加载全部数据,可以在MainViewController的initialize方法中实现。
如下所示
(4)各个控制器需要的service采用注入方式
如,MainViewController需要注入studentService、courseService、gradeService,如下:
其他controller注入如下:
8、view层
不变。
9、程序入口
程序入口类JavaFXAppMain的参考代码:
这个类中加载了spring上下文。