1.前言
上一篇文章介绍了系统的技术架构:Alex Wang:全栈开发踩坑之路1-技术架构,本文介绍如何搭建后端的代码框架。本人是从零起步开始学习SpringBoot的,之前也没有用过Spring相关架构,因此在代码中会不厌其烦的给出注释。并且会把我学过的学习资源列举在文章末尾。
本后端项目的地址(撰写中):apkkids/mymis_end
2.搭建后端代码框架
根据上一篇中的技术决策,选择使用SpringBoot来构建后端框架。产生框架有多种方法,最常用的就是利用http://start.spring.io/来生成代码框架,不过IntelliJ中已经集成了这个功能,因此我使用IntelliJ搭建SpringBoot框架。
在IntelliJ中选择创建Spring Initializr项目,添加Security、Web和MySQL依赖,如下所示:
生成SpringBoot框架
待代码框架生成完毕后,创建一些相应的代码包,最终代码结构如下所示:
代码结构
代码生成后,首先修改SpringBoot的配置文件application.properties,主要是配置数据库和端口,如下:
#mysql
spring.datasource.url=jdbc:mysql://localhost:3306/mymis?useUnicode=true&characterEncoding=UTF-8
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.username=your_db_user_name
spring.datasource.password=your_db_user_password
#mybatis
mybatis.config-location=classpath:/mybatis-config.xml
#端口配置
server.port=8082
接下来,就可以试着运行这个程序了,点击运行MymisEndApplication,就可以在http://localhost:8082/这个地址访问系统了,只不过这时候系统里面什么也没有,它会给出一个登陆页面,这是Security插件自带的。
默认登录界面
3.代码和包的结构
在Java代码包srcmainjavacom.yourname下面,创建如下代码包:
- bean,各类实体类
- config,关于SpringBoot相关的各种配置类
- controller,各种Controller类,是前端访问后端的入口类
- mapper,MyBatis的Mapper类
- service,各种服务类,一般来说对应Mapper类
- utils,系统内的工具类
MymisEndApplication单独放在外面。
在资源文件夹srcmainresources下面有如下分布:
- static文件夹,用来放置静态资源,因为本系统前后端分离,所以这里留空
- templates文件夹,用来放置后端模板,这里也留空
- application.properties文件,系统配置文件
- mybatis-config.xml文件,Mybatis的配置文件
在测试文件夹srctest中,包的分步与Java代码包一一对应。
根目录下还有如下文件:
- gitignore,git忽视文档配置,一般不用修改
- mvnw和mvnw.cmd文件,maven的相关文档,一般不用修改
- mymis_end.iml,IntelliJ的项目配置文件,不要手动修改
- pom.xml,SpringBoot使用的Maven配置文件
- mymis.sql,我提供的数据库建表文件,运行后即可建立本系统所需的数据库
4.修改pom.xml
在IntelliJ中使用MyBatis有一个坑,它在编译运行时,不会把Mapper类的XML配置文件拷贝到target目录中,导致运行出错,在pom中添加如下配置可以解决此问题:
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
<!--解决idea不自动将xml配置文件拷贝到target目录中的问题-->
<resources>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.xml</include>
</includes>
</resource>
<resource>
<directory>src/main/resources</directory>
</resource>
</resources>
</build>
5.最基本的请求响应代码
至此后端架构就基本上搭建起来了,首先要考虑三个问题:
1)如何通过用户名密码登录
2)如何响应url的请求
3)如何返回请求到前端浏览器
为简单演示如何解决以上三个问题,在系统中添加三个类:
SimpleSecurity:用来测试的权限配置类,它接收用户名密码,并调用一个权限管理类进行验证;
BackdoorAuthenticationProvider:用来测试的权限管理类,它实际上提供了一个后门,对于特定的用户名,直接通过验证;
SimpleController:Controller类,它接收来自特定url的访问,调用相应的方法,并返回信息。
用一张图来说明流程:
访问流程
添加完这些类后,点击运行,访问http://localhost:8082/hello,会给出登录页,在登录页中输入alex/任意密码,则可以得到一个页面,页面上是“Hello, MyMIS!”,表明后端已经成功响应了请求。
值得说明的是,如果SpringBoot中没用应用Security,则访问流程会省略掉鉴权的步骤,直接调用Controller类。关于Security的具体用法,会在后续章节中详细介绍,或者你也可以先看我的系列文章:Alex Wang:Spring Security零基础入门之一。
下一篇将在系统中添加实体类,但是实体类是依赖数据库的,因此会先介绍如何设计MySQL数据库架构。
6.学习资料
SpringBoot官网:Spring Projects
SpringBoot-Learning:程序猿DD/SpringBoot-Learning
SpringBoot中文索引(从这里开始比较好):Spring Boot 中文导航