从零开始搭建仿抖音短视频APP-构建后端项目

 项目持续创作中...

​​​​​​仿抖音短视频APP项目专栏

目录

聚合工程

构建父工程

构建子工程

构建接口工程并且暴露api接口

优雅Restful相应封装

Lombok与多环境profile

数据层

配置数据库逆向生成工具

配置mybatis整合SpingBoot

使用Knife4j实现接口文档


聚合工程

构建父工程

项目采用meavn创建一个聚合工程,采用meavn的分层结构。构建一个父工程,

pom:代表总工程,用于管理的

配置完按常理,在Meavn中应该会有坐标,但这里没有。

 我们这里用的dependencyManagement,是一种父子的关系,面向对象的一种思想。

 使用dependencyManagement的目的是为了保证父工程的干净, 也就是说父工程他只负责管理依赖,以及依赖的版本,而不会导入额外的jar依赖。 如此一来父工程的职责就很单一了,而且也符合了面向对象开发的父子继承关系, 依赖的导入只有在各自的子工程中才会进行导入。

如果不想加,可以把所有的坐标,在我们的(顶级工程)父工程导入,也没有问题。

meavn的编译工具所采用的版本是jdk的1.8,作为一个插件使用。

构建子工程

创建子模块,

 创建完成之后在父工程里会出现:

 book-common 通用工程,包含一些工具类,枚举类,自定义异常,封装的公共方法。

book-model 模型工程,所有的子工程以及所有(微)服务工程所涉及到的实体类都可以再此处管理 比如:POJO, Bean, Entity, BO, VO, DTO, MO, EO...

book-mapper 数据层,操作数据库(DAO)

book-service 业务层

book-api 接口层,暴露接口,提供给前端调用

在父工程中检查: 

在common中引入依赖:

注:这不能version,因为会覆盖父工程的版本。

依赖来源于Springboot中,它管理了很多的依赖: 

最后建议在父工程中,install,它会把我们所有的jar包进行安装和校验。

构建接口工程并且暴露api接口

在我们构建好web工程后,要创建一个启动类来启动我们的工程:

 此时,它会报错,因为之前在common中添加了依赖,而我们的项目是一层一层调用的。api依赖于service,service依赖于mapper,mapper依赖于model,model依赖于common,这样才会使得我们api里会有相应的依赖。

在model中:

 在mapper中:

在service中:

 在父工程进行一个install。

在启动类中:

 接着要构建一个controll的包,再创建一个类,在里面写我们最简单的一个接口方法:

随后要创建一个配置文件,首先我们的服务端口号,要和我们之前的项目保持一致。

 

 在里面进行一些配置:

 启动项目:

 访问hello:

 我们配置的一个banner,可以是图片等...控制台的一个效果,可以在云服务台和日志里面看见。

 现在表示已经可以对外体现我们的web能力了。

优雅Restful相应封装

我们和前端做对接时,会有一个统一的封装,也就是我们的接口请求的是什么样的状态,是否成功,有没有异常。

在common中:

 现在使用gracejsonresult,即优雅的封装,不包含枚举。我们通过优雅的封装可以在

responsestatusEnum中做一个定义。

由于枚举在前端后端都是统一的,前端在捕获status时,会根据状态,把对应的内容展示出来,

或者前端可以不根据状态码直接获取。

如何去使用? 这里我们是请求成功的:

 接着重启:

 现在我们获得的是json的一个字符串,前端根据状态码进行判断。

如果这里设计请求失败,在这里传入一个枚举:

 

 这就是我们优雅的一个封装。

Lombok与多环境profile

在common中引入一个依赖:

 早期它是作为一个插件,需要独立安装。现在被springboot集成了。现在的开发根据能够自动集成。

如何使用呢?创建一个类,

按照以往需要创建很多get,set函数。

生成的太多没有必要,我们把方法去掉,只保留属性,

 @data帮我们生成了方法,就可以调用了,

 我们可以使用日志进行打印,只需要正当前的类里加一个注释:

 

重启,做个测试:

 回到控制台:

 三个级别的日志级别,可以在配置文件中设置:

 我们有开发环境,生成环境,测试环境等,不同环境对于我们的代码是不同的,配置需要改变:

从配置来讲,只是端口号不同,在我们本身的配置里,注释端口号

在我们的dev配置文件中,删去相同的。

数据层

配置数据库逆向生成工具

接着要数据库逆向生成:
在navaciat中导入:

 并且在父过程中添加模块:

 MyMapper是一个工具,增对单表的增删改查,已经帮我们封装好了

配置文件我们将它当作工具使用 ,

这里要修改我们地方数据源,用户,密码等...

 生成我们对应的文件:

 

 将文件拷贝到mapper中

  这里继承我们的MyMapper

接着把pojo复制到mapper中

配置mybatis整合SpingBoot

此时mybatis的依赖坐标还没有加入

 

发现还是会报错,因为我们复制时没有加入jar包的依赖 ,这时候展开我们的逆向工具,重新拷贝一份。

这里接口就能对标找到我们的Mapper:

 我们还需要在配置文件中加入数据源:

开发环境:

 加入通用mybatis的配置:

 注:my.mapper一定要和本地做好匹配

最后在要添加我们的扫描器:

 最后做一个全局的install,重新启动Application

 这里完成了我们数据层的一个配置,但没有实质性的交互。

使用Knife4j实现接口文档

我们在真正开发的时候会有很多不同的请求方法,有些是不能通过浏览器请求的: 

这里用到了一个软件postman:

我们在这里主要要讲的是一个文档工具:

 通过这个工具结合springboot,增强我们的api文档。

项目介绍:

 能够反映需要传入的参数,能够得到什么等...免去我们后端开发写文档,维护文档的尴尬局面。

在api的pom文件中加入依赖:

接着创建一个配置类:

  通过注解扫描到容器中

我们现在要扫描的路径就是.contoller:

接着我们就能访问:

 在主页中都会显示

 与前端人员对接主要看的就是文档:

 

在调试中我们可以传入参数:

在后期开发也是可以通过这个来做测试的。

我们现在看到的是没有中文释义的,在controller可以注释:

 请求就是我们的hello

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/38292.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

抖音 -抖店开放平台 SDK 实现及项目工程

抖音 - 抖店开放平台 SDK 抖音 - 抖店开放平台:https://op.jinritemai.com/ 该 SDK 已实现 API 接口调用和消息推送验证解析 项目地址 github: gitee: 项目结构 common-rocketmq: 根据 阿里 com.aliyun.openservices 的 on…

将手机接收到的短信实时转发到服务器web端上(或其他需要的地方)

在爬虫时, 有的网站要登录, 登录时需要短信验证, 因为爬虫是跑在服务端上, 所以希望服务器能实时获取到手机上的短信,使爬虫能够自动化. 为此自己开发了个能实时将安卓手机上的短信转发到服务器上. 展示如下:(将手机短信发送到服务端并储存起来,然后可以网页形式访问这些短信.…

(转)短信vs.推送通知vs.电子邮件:app什么时候该用哪种方式来通知用户?

转:http://www.360doc.com/content/15/0811/00/19476362_490860835.shtml 现在,很多公司都关心的一个问题是:要提高用户互动,到底采取哪一种通信技术获得的效果是最好的,怎样才能让用户心甘情愿的融入到自己的产品语境…

入门级短信推送,你还不会吗?

短信推送服务是生活中常见的,包括一些企业的营销或验证码场景的服务,这些都是需要短信服务来进行的 在开发中也比较常见,如开发一个个人博客系统,就会给注册或登录界面加上填写手机号发送验证码功能,或者加上发送邮件等…

瑞吉外卖(22)- 短信发送功能开发(了解一下)

文章目录 效果展示短信服务介绍阿里云短信服务-(了解)介绍注册账号 代码开发maven坐标调用API(SMSUtils.java) 效果展示 短信服务介绍 阿里云短信服务-(了解) 介绍 注册账号 这里我们不使用阿里云了,注册需要营业执照,我们只是了…

Tasker短信转发

需要开启权限(在权限管理中)与监听功能(在系统设置的辅助功能中) (1)添加事件: 点击右下角的 ----> 事件 ----> 电话 ----> 收到短信 ----> 不做修改返回即可或者在发件人或者内…

Tasker 短信转发微信,所有通知转发微信

前言 快速写一篇,不想花太多时间,不是详细教程,导入就完了。 准备 一台能看片的安卓手机(至少安卓5.0)。安装好Tasker(版本越新越好,目前5.9.3 beta3)。权限给足,自启&am…

android实现短信自动转发,利用短信通知的方式在Tasker中实现收到Android手机短信自动转发到微信...

在Tasker中利用短信的通知实现短信内容转发到微信 之前的教程是利用Tasker自带的短信变量来实现的,这有一个无法解决问题:在360,魅族,坚果等品牌的手机中无法获取短信的消息内容。 利用短信的通知则可以获取短信的内容&#xff0c…

AIGC技术发展和应用方向

AIGC(Artificial Intelligence Generated Content)是指通过人工智能技术生成的各种文本、图像、音频和视频等多媒体内容。AIGC技术是机器学习和自然语言处理等技术的结合,通过对海量数据的学习和分析,可以让计算机模拟人类的创造力…

未来先行者共赴2023全球智博会

从传统机器学习到深度学习,从简单执行到多模态、多任务的综合处理,人工智能技术正不断向更加智慧和复杂的领域拓展进化。伴随着人工智能一路高歌猛进的跨越式发展,产业寻求共融,加速智慧升级;城市汇流聚链,…

GAN出一个女朋友

文章目录 GAN(生成对抗网络)1. 生成对抗网络简述2.具体内容2.1 网络如何训练2.2 网络训练时会遇到的问题 3.GAN的发展4.GAN的代码实践4.1 基于GAN的mnist数据生成4.2 放大招—生成美女图片4.2.1 爬取美女图片4.2.2 提取人脸4.2.3 开始训练 GAN(生成对抗网络&#xf…

chatgpt赋能python:Python更换桌面背景指南:教你如何用Python快速实现桌面背景更换

Python更换桌面背景指南:教你如何用Python快速实现桌面背景更换 如果你已经厌倦了一成不变的桌面背景,那么Python可以帮助你快速实现更换功能。本指南将教您如何用Python编写简单的代码来更改桌面背景。 如何用Python更换桌面背景 Python中有几个库可…

chatgpt赋能python:Python自定义背景:让你的编程世界更加缤纷多彩

Python 自定义背景:让你的编程世界更加缤纷多彩 随着科技的迅速发展,人们的日常生活和工作中越来越多地依赖于电脑和各种数字设备。而对于程序员来说,他们的编程世界更是离不开电脑和代码编辑器。因此,如何让这个世界变得更加优美…

chatgpt赋能python:如何使用Python将背景色更改为黑色

如何使用Python将背景色更改为黑色 在网页设计中,背景色是非常重要的元素之一。有时候,为了让网页看起来更加时尚和艺术,设计师可能会使用黑色背景来营造一种神秘和高质感的感觉。在本篇文章中,我们将介绍如何使用Python将背景色…

chatgpt赋能python:Python图片查看器:优化你的图片浏览体验

Python图片查看器:优化你的图片浏览体验 如果你常常处理图片,那么一个高效的图片浏览器会节约你大量的时间。本文将介绍一款使用Python编写的开源图片查看器,它可以帮助你快速预览和编辑图片。此外,我们还会分享如何使用关键字优…

C/C++编程:继承构造函数

引入 在传统C中,如果派生类要使用使用基类的构造函数,通常需要在构造函数中显式声明: struct A{ public:A(int i) {} };struct B : A{B (int i) : A(i){} };B派生自A,B又在构造函数中调用A的构造函数,从而完成构造函…

C++11之继承构造函数(using 声明)

系列文章 C11之正则表达式(regex_match、regex_search、regex_replace) C11之线程库(Thread、Mutex、atomic、lock_guard、同步) C11之智能指针(unique_ptr、shared_ptr、weak_ptr、auto_ptr)浅谈内存管…

继承与派生(Part Ⅱ)——派生类的构造函数/析构函数

派生类的构造函数和析构函数 构造函数的主要作用是对数据成员初始化。基类的构造函数是不能继承的,在声明派生类时,派生类并没有把基类的构造函数继承过来,因此,对继承过来的基类成员初始化的工作也要由派生类的构造函数承担。所…

6.12C++:继承基类的构造函数、单继承的构造函数、多继承的构造函数、派生类复制构造函数、派生类的析构函数

1 继承基类的构造函数 class A{ public:A(){}; // A的构造函数 }; class B : public A{ public:using A:A; }2 单继承的构造函数 class A{ public:A(int i){}; }; class B : public A{ public:B(int i, int j): A(i), bb(j); /i传递给A的构造函数,j初始…

JavaScript构造函数继承

首先介绍对象的call()函数和apply()函数,这两个函数的作用相同、用法不同。它们的作用均是指定当前调用函数的this对象是谁。 call()函数:在第一个传递的参数为一个对象,该对象为该函数的this对象,后面依次传递函数的实参。 apply…