目录
作为一个现代化电商平台,什么最重要呢?of course 是用户,广大用户群体是支持我们可持续发展的基石,顾客是上帝
, 虽然在当今上帝已经不被重视了,特别是很多的平台对于老用户就是恨不得赶紧Out...但是用户量是一切的基础,那我们就开始创建我们的上帝吧!
数据库的部分,我在这里就不多讲了,大家需要的话可以直接去传送门 抓取脚本expensive-shop.sql
.
参考上节内容:传送门
首先,我们先来分析一下要注册一个用户,我们系统都需要做哪些动作?
Mybatis Generator
工具生成了基本的pojo
,mapper
,对于简单的操作我们只需要再编写service
和controller
层就可以完成我们的开发工作了。在mscx-shop-service
中创建com.liferunner.service.IUserService
接口,包含2个方法findUserByUserName
和createUser
,如下:
接着,我们需要具体实现这个接口类,如下:
这里有几处地方有必要说明一下:
tk.mybatis.mapper.entity.Example
通过使用Example来构建mybatis的查询参数,如果有多个查询条件,可以通过example.createCriteria().addxxx
逐一添加。@Transactional(propagation = Propagation.REQUIRED)
,开启事务,选择事务传播级别为REQUIRED
,表示必须要有一个事务存在,如果调用者不存在事务,那本方法就自己开启一个新的事物,如果调用方本身存在一个活跃的事务,那本方法就加入到它里面(同生共死)。org.n3r.idworker.Sid
, 这个是一个开源的 分布式ID生成器组件,传送门, 后期有机会的话,会专门写一个id生成器文章。MD5GeneratorTools
是用来对数据进行MD5加密的工具类,大家可以在源码中下载。也可以直接使用java.security.MessageDigest
直接加密实现,总之密码不能明文存储就行了。SexEnum
这个是一个表述性别类型的枚举,在我们编码的规范中,尽量要求不要出现Magic number
,就是开发界常说的魔术数字(即1,2,300...)private final static Logger logger = LoggerFactory.getLogger(UserServiceImpl.class);
,这是因为我们在开始的时候,我们引入了lombok
依赖,不记得的同学可以参考传送门。在这里依赖中,它继承了很多的日志组件,我们只需要使用一个注解lombok.extern.slf4j.Slf4j
来开启日志,使用log.info..
就可以了。UserRequestDTO
又是个什么鬼?在我们开发的过程中,很可能会有大批量的参数需要传递,这时我们如果使用xxx#(String aa,Integer bb,Boolean cc...)
会让我们烦不胜数,而且看着也不美观,这时候我们就可以选择创建一个新对象来帮助我们传递数据,那么也就是我们的UserRequestDTO
对象,所谓的DTO
就是Data Transfer Object
的首字母缩写,顾名思义,它是用来传递数据对象用的。同样在mscx-shop-api
中,创建com.liferunner.api.controller.UserController
,实现用户创建。
JsonResponse
对象是为了方便返回给客户端一个统一的格式而封装的数据对象。JsonResponse
@Api(tags="用户管理")
,@ApiOperation("创建用户")
,这个是Swagger 的注解,我们会在下一节和大家详细探讨,以及如何生成off-line docs
。在我们每次修改完成之后,都尽可能的mvn clean install
一次,因为我们隶属不同的project,如果不重新安装一次,偶尔遇到的问题会让人怀疑人生的。
当看到上述运行结果之后,就可以启动我们的应用就行测试啦~
测试API的方式有很多种,比如curl localhost:8080/validateUsername
,在比如使用超级流行的Postman
也是完全ok的,我这里用的是之前在第一篇中和大家所说的一个插件Restful Toolkit(可以实现和postman一样的简单效果,同时还能帮助我们生成一部分测试信息)
,当我们应用启动之后,效果如下图,
我们可以看到,插件帮我们生成了几个测试方法,比如我们点击validateUsername
,下方就会生成当前方法是一个包含username
参数的GET
方法,demoData
是插件默认给我们生成的测试数据。可以随意修改。
点击Send:
可以看到请求成功了,并且返回我们自定义的JSON格式数据。
接着我们继续测试用户注册接口,请求如下:
可以看到,当我们选择create
方法时,插件自动帮我们设置请求类型为POST
,并且RequestBody
的默认值也帮助我们生成了,我只修改了默认的username
和password
值,confimPassword
的默认值我没有变动,那按照我们的校验逻辑,它应该返回的是return JsonResponse.errorMsg("两次密码不一致!");
这一行,点击Send:
修改confimPassword
为12345678
,点击Send:
可以看到,创建用户成功,并且将当前创建的用户返回到了我们请求客户端。那么我们继续重复点击创建,会怎么样呢?继续Send:
可以看到,我们的验证重复用户也已经生效啦。
下一节我们将学习如何使用Swagger自动生成API接口文档给前端,以及如果没有外部网络的情况下,或者需要和第三方平台对接的时候,我们如何生成离线文档
给到第三方。
gogogo!