背景
上一个小节,我们已经初步完成了gin整合swagger,发现gin中使用swagger也是很香的,这个可以方便我们少些很多接口说明文档,应该上一个小节说过,我们开始的是实战系列的教程,所以本小节废话不多,将完整的写完一个实战项目的代码
因为我们做的是电影管理系统,所以这个小节,我们将围绕对电影进行增删改查的一些操作开始做起,电影的数据,我们将会从豆瓣中获取,所以我们先定义一个相对比较齐全的电影类型的数据类型,本小节完成的基本功能是
- 保存电影数据
- 批量保存电影数据
- 根据电影id删除电影数据
- 根据电影id查询用户数据
虽然看起来比较简单,但是我第一次敲这个代码的时候,还是很牛逼的,就是感觉golang操作数据库,如果用原生的sql库,操作起来还是比较麻烦的,主要是异常比较多,我们要时时刻刻处理异常的问题,这个非常麻烦,也许是我写的不对,完全是按照写 java 的思想写的,如果写的不对的地方,还是希望大佬批评指正
废话不多说,我们还是从上个小节的代码基础上,我们开始继续慢慢整合吧,老规矩,先把最后整合的完整骨架图列一下
Step1.编写我们的controller层——增加路由
与写java代码比较像的是,我们还是优先编写controller层,如下图所示,我们一共定义了四个路由,看起来还是比较简单易懂的,不多做解释
接下来,我们就要分别编写我们的 service 层的逻辑编写了,因为到目前为止,逻辑还是比较简单的,所以我们就先把底层操作数据库的代码优先编写了
Step2.定义 mysql 数据库模型
因为我们保存的是一个电影模型,所以我们还是优先把电影数据结构定义一下,golang定义的数据结构如下图所示,因为我们要gin来做参数绑定的,前后端数据交互是post请求,请求类型是json,因为有数据绑定,所以我们要定义匹配的json字段名,最后结果如下
Mysql的表定义如下
Step3.golang连接数据库,基本逻辑保存逻辑书写
3.1 golang连接数据库,这个在之前的文章介绍过,本文不过多的介绍,与上几个小节的配置基本一样,如下图所示
3.2 修改movie.go,对象模型新增操作数据的原生方法
3.2.1 保存电影信息
3.2.2 根据id查询电影信息
3.2.3 删除电影信息
3.2.4 批量保存电影信息
因为之前有一个小节,专门介绍过golang操作mysql的知识,这边操作基本相同,所以这边我们就不会再过多介绍,不过这边我发现写的时候,并不是非常方便,毕竟如果使用原生的sql,不用orm框架还是比较累的,我们有空再一起学习一下golang的orm框架gorm,然后再修改一下这边的逻辑
Step4.完成service层的编写
刚刚说过,因为这个实战项目刚刚起步service层还是比较简单的,并没有非常复杂的逻辑需要处理,所以目前,我们要做的就是解析客户端带过来的参数,然后进行数据绑定,最后调用我们上一个小节定义的 dao 层逻辑,这样我们就大功告成了
4.1 保存单个电影数据,在这边我们有一个知识点需要记忆一下,就是调用gin的context.ShouldBindJSON进行数据绑定,这边我们以后会经常用到,所以需要进行一下简单的临时记忆,还有我们也要记忆一下sawgger的注释的标签含义,我们只要有一个大概的印象就可以了,如果有时候忘记了,可以简单的网上搜索一下就可以了
4.2 根据id获取电影信息
4.3 删除逻辑在service层非常相似,都是获取到id,只是一个是调用查询,一个是调用删除,还是比较相似的
4.4 批量保存的逻辑还是相对复杂一点,因为我们是保存的集合对象,所以我们要定义一个movie几个模型
在此基础上,然后我们就可以进行与单个保存的无差别代码了
好了,到此为止,所有的代码就差不多结束了,接下来把几个辅助类的代码也简单地贴一下
1.常量类
2.返回对象,(interace{}表示任意对象,你可以理解成java中的Object对象)
测试
接下来,我们就要开始测试我们写的代码了,不过跟上一章说的比较像的是,我们需要先swag init一下,这样才能生成最新的swagger定义了,运行完swag init之后,启动项目,访问如下网址
保存数据,如下图所示,不过另我意外的是,后台接收到的请求method居然是options,我不知道我哪里写错了
后来我看了良久才知道是main函数的swagger注释写错了,如果是本地,一定要写localhost,不能写127.0.0.1
数据库数据也正确插入
根据电影id查询电影基本信息
删除电影信息
批量保存用户信息
小结
本小节的篇幅有点长,希望大家耐心看完,如果有时间,可以手敲一遍,这样大家印象也会比较深刻,总比你一开始就看golang的内存模型,channel等等高深的内容来的舒服,我们还是一步一个脚印的去学,下一个小节,我们将在云端使用docker来部署我们这个实战项目
如果大家看到这里,希望大家点一个关注,觉得写得不错,希望给一个点赞,真心话,你的点赞和关注是对我最大的认可,也是我写作的最大动力
还有一个好消息分享一下,头条终于通过了原创认证了,这一个月的文章没有白费心血~接下来,我还会好好努力的~,正确给大家带来更多优质的golang和java教学