1 Star 1 Fork 0

Condorcyh / section1

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
README

说明文档

0. 完成情况

全部完成

测试全部通过,mvn jetty:run 和 mvn clean package 运行成功,打出的 war 包放置在根目录下

1. 清空 web.xml 配置,改成 java 配置类

此处参考了 section4 和 section6 的代码

因为后面会有很多配置类,所以新建 config 包,增加 WebInitializer 类,其继承自 AbstractAnnotationConfigDispatcherServletInitializer,里面引入两个配置文件,RootConfig 和 DataConfig。新建 WebConfig 类,进行 JSP 视图解析器等配置。DataConfig 进行有关数据库的配置。最后删除 web.xml,同时 viewspace-servlet.xml 也可以删掉了

2. 优化控制层的 loginCheck 方法,并且添加数据校验功能(@Valid),用户名 3-6 个字符,口令 6 个字符,并有错误提示

此处主要参考 section4 的代码

该要求是对 Spring 中的 Java 校验 API 的考察,首先添加 hibernate-validator 的依赖,然后在 LoginInfo 类中的 username 和 password 变量上添加相关注解,有 @NotNull 和 限制长度的 @Size。为了使校验功能生效,我们在 LoginController 类中的 loginCheck 方法,即使用到了 LoginInfo 类的这个方法的形参列表里,在 LoginInfo 对象前添加了 @Valid 注解,告知 Spring 需要确保这个对象满足校验限制。对于可能产生的错误,在该对象后面又加了一个 Errors 形参。

现在 loginCheck 中就需要检查两个地方,一个是之前提到的校验,还有一个就是数据是否存在。为了报错信息的合理,我们先对数据进行校验,如果出现错误,则进行相关的错误提示。当数据校验合格之后,我们再去检查数据库中是否存在该用户信息

3. 数据库由原来的 mysql 改成 H2 内嵌数据库,不要有外部数据库访问依赖,exampledb.sql 数据脚本同步修改

这一条要求和下一条并在一起说

4. DAO 层实现由现在的 jdbc 改成 JpaRepository 自动实现,方法名可以改变

此处主要参考 section7 的代码

在 config 中新增 JpaConfig 类,其中 dataSource 方法就配置了 h2 数据库,同时关于 exampledb.sql 脚本,我复制了一份到 resources 文件夹下,并对其进行了修改,JpaConfig 中使用的就是 resources 文件夹下的数据库脚本。JpaConfig 写好了之后,之前的 DataConfig 就可以删掉了,RootConfig 里 import 的就变成 JpaConfig。同时 applicationContext.xml 也可以删除了,因为 JpaConfig 里也配置了事务

这里说一个小点,本来的 User 类被我改名为 Njuer,因为似乎 user 在数据库脚本中是一个保留字,或者说是关键字,为了正常运行,这里我将名字修改了,不过功能都没有改变

DAO 层的改动较大,首先根据原来的 LoginLogDao 类 和 UserDao 类,新建两个接口 LoginLogRepository 和 UserRepository,它们都继承 JpaRepository。其中一些方法可以直接通过 SpringData 来自动实现,对于剩下需要手动实现的两个方法,我们又建立了两个接口类,让先前建立的两个接口类分别实现新建的接口,实现时,通过 @PersistenceContext 注解将 EntityManager 注入到 Repository 中,然后通过 EntityManager 操作数据库

5. DAO 层的 findUserByUserName 添加缓存功能,缓存用 EhCache 实现

此处主要参考 section9 的代码

在 config 中新增 CachingConfig 类,同时在 resources 下新增 ehcache.xml,所有的配置均与 section9 中相同。

配置完成之后,我们就到 UserRepository 接口中,在 findUserByUsername (改了名字)方法上添加 @Cacheable 注解,设置缓存名称为 userCache,缓存相关设置即全部完成

6. 测试改进:service 层的测试将现在直连数据库改成使用 mock 取代 dao 层

其实我们想调用的是真实的 service,所以应该用 @Spy 而不是 @Mock

在第一个测试 hasMatchUser 中,使用 doReturn 简单测试了是否存在匹配用户的逻辑

第二个测试 findUserByUsername 中,我们将 userService 真实调用的方法结果和 userRepository 模拟调用的结果进行对比,测试 userService 的逻辑

第三个测试 loginSuccess 中,道理和第二个相同,都是将真实调用和模拟调用的结果进行对比

空文件

简介

暂无描述 展开 收起
Java
取消

发行版

暂无发行版

贡献者

全部

近期动态

加载更多
不能加载更多了
1
https://gitee.com/condorcyh/section1.git
git@gitee.com:condorcyh/section1.git
condorcyh
section1
section1
master

搜索帮助

53164aa7 5694891 3bd8fe86 5694891