作业小结:将gtvg项目修改为支持mvc和数据访问的过程

首先,复制之前作业的my_mvc代码,这里面已经将gtvg改成mvc的模式了。复制之后修改文件夹名字为gtvg-mvc-jdbc。修改pom.xml里面的相关内容,首先是修改groupId确保使用eclipse能够正常导入项目。

这里写图片描述

其次是加入本次作业需要用到的maven依赖,主要有以下截图的几个依赖。

这里写图片描述

这里写图片描述

这里写图片描述

准备数据访问属性文件,persistence-mysql.properties,这里老师给出的代码里面已经写好,直接照着打就行。这个文件放在src/main/resources文件夹下。

这里写图片描述

上述步骤完成之后就可以开始写spring的配置文件了。之前作业my_mvc中我使用的是配置类的方法,所以这里我继续使用配置类而不是XML配置,个人觉得用Java代码配置比XML好理解。可能是因为我不太习惯XML吧。下面是配置类的代码。主要有一个地方需要注意,ComponentScan注解里面的包要写成本项目对应的代码包”thymeleafexamples.gtvg.business”。

这里写图片描述

写完配置类之后在SpringServletInitializer的createServletApplicationContext()方法中注册配置类,注册方法和之前写my_mvc的时候一样,如下截图。

这里写图片描述

下面开始改造实体类,实体类的代码都放在thymeleafexamples.gtvg.business.entities代码包中。改造实体类的过程其实就是在进行所谓的ORM,Java对象跟关系数据库的映射。下面截图是Comment实体改造之后的结果,其他实体类的改造过程均类似,这里就不重复截图了。ORM其实没有太多难点,看看文档,看看注解,其实也挺好理解的。

这里写图片描述

实体类改造完成之后,就可以准备数据访问类了。新建代码包package thymeleafexamples.gtvg.business.dao。所有数据访问类的代码都放在这个代码包下面。根据规范,所有数据访问类都是按照接口/实现模式来编写,命名格式也都以Dao或者DaoImpl结尾。dao代码包的文件结构如下图所示。

这里写图片描述

下面是CommentDao和CommentDaoImpl的代码截图,其他数据访问类的写法类似,这里同样不再重复截图。首先写一个数据访问类接口,里面提供CRUD操作的方法。数据访问类的实现类的代码需要注意不要漏掉下面截图所示的两个注解,然后出了实现数据访问类接口描述的CRUD方法之外还要写setDataSource()方法,并且完善CommentMapper类。

这里写图片描述

这里写图片描述

下面是CommentMapper类的代码实现,这个类用于完成查询结果到实体类的映射,帮助我们将从数据库查询得到的结果转换成一个实体类。

这里写图片描述

接下来是查询操作的实现,如下所示,比较简单,通过调用jdbcTemplate的query()方法即可,其他事情就交给这个jdbcTemplate去做,无需开发人员操心。query()方法第一个参数是依据sql查询语句,第二个参数就是将查询结构映射到实体类的Mapper对象了。

这里写图片描述

接下来是创建操作的实现,如下所示。

这里写图片描述

本项目无需使用到删除更新操作,因此最后这三个方法暂时放空,后面有时间再写。查阅一下文档其实不难实现。

这里写图片描述

按照上述过程一步一步完善剩下的所有数据访问类。数据访问类准备好之后就可以来开始写服务了。所有服务都放在thymeleafexamples.gtvg.business.services代码包中。下面是CustomerService的截图示例,其他服务的编写过程也是类似。注意几个点,加上相应的注解,还有加上一个dao变量,该变量即相应服务需要用到的数据访问类对象。由于之前已经注册过配置类了,所以这里直接给dao变量加上@Autowired注解,在使用服务的时候就会自动装配,不用我们自己创建对象,非常方便。

这里写图片描述

按照上述步骤完善其他服务类。完成之后还要做最后一点修改,即controller的修改。下面是ProductListController的截图示例,有一点地方需要小改动,我已经将他圈出来了。之前写my_mvc的时候是自己new一个服务对象,现在,经过前面的改造之后,我们如果自己new一个服务对象的话,服务对象的自动装配工作不会启动,因此productService里面的dao变量将是null,这会带来一系列错误(这个坑很深,dao为空的话一直抛出空指针错误,耗了两个多小时才找到原因)。修改为如下所示之后,所有工作都由自动装配完成,代码才能正确运行。

这里写图片描述

到这里,代码改造工作可以算是完成了,不过要把代码成功地跑起来,还没那么简单。我们还没准备好数据库。安装MySQL数据库之后,我运行过老师给出的jdbc-basic样例,发现运行之后,它创建了数据库test_jpa,但是却不会自动创建表foo,所以运行之后一直提示 test_ipa.foo不存在。在命令行下查了一下数据库,发现多出了一个test_jpa数据库,进入之后却发现里面空空无物,这就证明了代码确实没有创建foo表格。所以还是需要手动在命令行下创建表格。创建完之后,成功跑起了jdbc-basic。为了避免再次进入这个坑,我先在命令行下面把数据库表格都创建好了。下面是部分截图示例。

这里写图片描述

创建完表格之后,项目可以运行起来了。但是没有数据,还没有做数据持久化之前,gtvg项目的数据都是写在代码中的,现在我们将这些数据写入数据库,下面是导入product数据的截图示例。

这里写图片描述

完成之后就可以正常地跑起项目了。效果如下面截图。这一页的数据比较多,所以我没有全部导入,就只是导入了一部分,所以下面截图的product的列表项相比原来的要少一些。不过这无碍于得到正确的实验结果。

这里写图片描述

实验完成。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值