前排劝退:本教程只针对 Spring Boot 以及 SSM 框架的初学者,展示 SSM 框架的大概的工作流程,此外也不会讲类似 SpringMVC 这些概念,目的单纯是为了能够跑起一个 SSM 框架的项目,而对其他的东西不求甚解。
前期准备
工具/环境 | 备注 |
---|---|
Windows 10 |
博主系统是 win10,当然考虑到语言是 Java ,所以系统的差异可能并不会影响到这个项目。 |
IDEA ultimate |
请尽可能使用 ultimate 版本,community 版本功能不全,可能在本教程中会遇到各种问题。 如果您是在校大学生,那么使用学校邮箱大概率可以得到一年免费的 ultimate 版本使用权。 如果您是 eclipse 党,可以考虑更换 IDEA 。 |
JDK 8 |
Java 的经典版本,如果您的版本过低,可能会遇到一些问题,推荐升级。 |
MySQL 5.7 |
同样是一个经典版本,过低的推荐升级,因为 5.7 之前的版本和 5.7 之后的版本可以类比为 1 和 2。 |
Navicat for MySQL |
可选项,但是强烈推荐(可以寻找替代品)。有一个图形化界面怎么也比小黑框好。 |
创建项目
博主的 IDEA 装了中文插件(2020.1 版本之后有),不装也可以,见仁见智。
这是 ultimate 版的界面,如果是 community,左边那一列基本上是空荡荡的(金钱的力量)。选择 Spring Initializer
,右边的如图设置即可。
这一页的重点在图上都有写。看这一页起了好多名字,起名困难的我留下了眼泪(别急,后面还要起名字)。
这一页的功能是选择预装的依赖,可以什么都不选,之后自己按需添加。
起名字又来了,这回是项目的本地名称,也就是只记录在 IDEA 中,之前的名字是记录在项目信息中的。
起完名字点击 Finish
,准备进入新的篇章。
项目结构
作为一个与时俱进的项目,结构当然也要随大流,下面放一下项目最基本的包结构:
src/main/
java/com/example/demo/
controller/
Controller.java
entity/
User.java
mapper/
UserMapper.java
UserMapper.xml
service/
impl/
UserServiceImpl.java
UserService.java
DemoApplication.java
resources/
上面给出了大致的结构,接下来讲一下它们(之中的文件)应当承担的功能:
名称 | 功能 |
---|---|
controller |
在 MVC 中,它直观的对应其中的 C 。 |
entity |
也有人叫 PO (Persistent Object) ,PO 这个名字直观地看出它对应数据库中的记录,它的每一个属性都对应一个字段。 |
mapper |
它的同类是 DAO (Data Access Object) ,显然它是用来处理数据的,它封装了 jdbc 。Mybatis 是一种半自动化的 ORM 框架,所以 UserMapper.java 是一个 interface ,而非 class ,具体的SQL 语句我们写在同级目录下的同名 xml 文件中。mapper 和 DAO 是两种可以互相取代实现方式,界限没有那么绝对。 |
service |
它显然是用来实现服务的,这里一般定义一些接口。 |
service/impl |
这里实现 service 中的接口,当然可以不用分化那么细,不写接口直接写一个类也是没问题的。 |
dto |
Data Transfer Object ,是传输数据的对象。在上面的结构中没有体现,因为它完全可以被 entity 取代。你可以把 DTO 理解为 PO 的 瘦身版,比如有时候返回给用户的时候不希望返回密码等等数据:1. 你可以选择置为 null 2. 或者用一个 DTO ,其中根本没有 password 。在项目越来越大的时候后者是一个几乎必然的选择。 |
这几个包已经描述完了,你大概可以感受到这样一个项目是怎样运作的了:
- 用户发来请求,被某个
controller
接收到 controller
调用service
来完成服务service
完成服务,调用mapper
将数据持久化至数据库中,并返回结果- 在这其中,传递数据的应当是
entity
,细化一点就是DTO
,简单一点就是普通的Java
对象
还有一个 DemoApplication.java
文件没有提到,在下一节中将揭晓它的功能。
Spring 注解
上一节讲了项目的整体结构,这里将把 Spring 添加到我们的项目中。
思考一下,如果没有 Spring,我们可能会在 controller
中 new
一些 socket
来监听端口,然后将接收到的数据打包成一个对象,然后创建一个 service
来处理……
随便一想这都是上百行的代码量,一不小心可能还会来几个 NullPointerException