前言
差不多两年前,那个时候我准备要做毕业设计了,才第一次知道java有框架这种东西,在网上找了好多SSM的教程,那会儿真的是Spring+SpringMVC+MyBatis搭建的,印象极深的是还要写一堆配置文件,也不知道为什么写,报错了也不知道哪里错,根本不像现在有SpringBoot这么简单。
后来还好在博客园上看到了一位前辈的SSM框架搭建过程,虽然也是一堆问题,但前辈还是很有耐心地解答,甚至加qq帮我看项目错在哪里,很是热心。
而今两年过去,我自己也成了能写教程的人了,希望这个教程能帮到你吧。
这个教程的目的是教会你初步使用SpringBoot。
如果你是想系统的学习SpringBoot,那么这篇文章可能帮不了你太多。
如果你是现在马上要用到,那么可以看下这篇文章,会讲最基本的搭建和使用方法,每一步都会讲为什么,力求用最少的步骤让你懂搭建和使用SpringBoot。
项目的搭建
项目是使用Maven和eclipse搭建的。
网上相关的教程多是使用idea的,但使用eclipse的其实也不少,自己更偏爱eclipse,所以这里会使用eclipse,搭建思路和idea是一样的,差不了多少。
Maven
对Maven有了解的朋友可以跳过这部分了。
Maven的作用
Maven的作用是,让用户在项目中的pom.xml写下某个jar包的名字(又叫依赖),项目就可以自己联网去找对应的jar包,省去了开发者一个一个去找jar下载的功夫,因此使用一定要联网。包括SpringBoot,说到底也是一堆jar包的集合,因此我们可以新建一个Maven项目来继承SpringBoot项目,这样我们的项目就是SpingBoot框架了,接下来的做法便是这样。
Maven的安装
一般而言,新的eclipse都已经集成了maven,如果没有,网上有很多Maven安装的教程。
新建Maven项目
在Package Explorer下右键,选New→other;
在弹窗中找到Maven文件夹,点开,选择里面的Maven Project,点击next
创建一个简单的Maven项目
SpringBoot在这里是作为父项目被我们的项目继承;
创建好的项目目录如下:
添加Maven依赖
打开pom.xml,添加如下依赖(这个依赖是SpringBoot的启动器,tomcat内置在里面),这里写下并且保存之后,eclipse便会自己联网去找spring-boot-starter-web这个jar包下载,并放在下图的Maven Dependenices文件夹中,之后如果要添加什么jar包,可以百度这个jar包的依赖,在dependencies这个标签内写下即可。
<dependencies>
<!--快速整合springmvc和tomcat -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
添加前
添加后
使用示例
项目到这里搭好了第一步,可以进行最低限度的访问,接下来写点代码来访问
编写控制类
贴一下代码
package com.TandK.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
@Controller
public class IndexController {
@RequestMapping("/hello")
@ResponseBody
public String sayHello(){
return "hello, SpringBoot!";
}
}
编写SpringBoot的启动类
package com.TandK;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class App {
public static void main(String[] args) {
SpringApplication.run(App.class, args);
}
}
运行项目
直接运行该启动类
控制台正常打印无报错,打开浏览器访问,显示刚刚控制类方法里写的数据。注意SpringBoot默认端口是8080(不过这个也可以改的,在SpringBoot配置文件里改,这个后续会说)。
注意点
启动类即App可以和Controller类放在同一级,也可以放在Contoller类上一层,但不能放在和Controller包平级的包下,否则项目会正常启动,但页面却访问不到。
页面访问不到就会这样
SpringBoot的用法
上面只是做了简单的访问测试,要作为一个完整的web项目,我们需要
1.解析用户发出的请求
2.拿到数据库中的数据
3.进行数据的运算
4.将数据呈现在用户面前。
那么按照这个思路行动,除了SpringBoot的启动类(上文中的App)我们会在src/main/java下建下面几个包
- dao:又叫mapper,我们会用mybatis在此层进行与数据库的交互
- service:处理数据的逻辑和校验,负责dao和controller这两层的连接和他们之间的数据处理,一般来说我们有什么数据的运算会写在这里,有的会建一个service.impl包,service包下写接口,service.impl下对应的类来是实现接口。
- controller:又叫web,视图处理和接口暴露的地方,可以看到上文中是在controller中根据用户访问的连接,然后跳转到对应的页面将对应的数据显示给客户看
- pojo:也叫do,java中的对象写在这个包里,主要是和数据库的表对应,通常来说是要和数据库表中的字段完全一致的。
在src/main/resources下会建立一个application.properties,是SpringBoot的全局配置文件,因此文件名不要写错,后续有什么配置都会在里面写。
如果看不懂,往下跟着做一遍就懂了。但建议下面的做了一遍之后,再回来看看这部分。
整合MyBatis-Plus
介绍
使用MyBatis-Plus可以无须定义sql语句就能够完成数据库的增删改查操作。但是它不是万能,有些时候还是需要去定义的sql语句。
MyBatis-Plus官网
添加MyBatis-Plus的相关依赖
<!--整合mybatis-plus-->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.3.2</version>
</dependency>
<!--mysql驱动-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.11</version>
</dependency>
<!--alibaba的数据连接池-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.1.21</version>
</dependency>
注意,这里的驱动(即mysql-connector-java)要看对应的mysql版本,我的mysql是8以上的,所以mysql驱动要用8.0.11的。
如果你的mysql是5.X的,建议去找5.X的mysql驱动。我之前用的mysql驱动是5.X的,就会报错,因此这块要注意。
添加数据源
在application.properties中配置数据源DataSource,这里的配置根据自己的实际情况写
# springboot数据源初始化
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/你的数据库名?serverTimezone=UTC&characterEncoding=utf8&useUnicode=true&useSSL=false&allowPublicKeyRetrieval=true
spring.datasource.username=你的数据库用户名
spring.datasource.password=你的数据库密码
访问数据库中的数据
比如我在ssm的数据库中有一个user表,数据如下
pojo包
要在pojo包中写一个User类,字段与数据库完全一致,生成各自的setter/getter方法
dao层
在dao包下新建一个UserDao的接口,专门用来数据库中的User表进行增删改查,要继承BaseMapper。
package com.TandK.dao;
import com.TandK.pojo.User;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
public interface UserDao extends BaseMapper<User>{
}
这里记得要回到App(SpringBoot启动类)中添加一个注解,告诉SpringBoot,Dao层的包名。
service层
在service包下定义一个IUserService的接口,然后在里面定义一个根据用户id查询用户信息的方法。
package com.TandK.service;
import com.TandK.pojo.User;
public interface IUserService {
/**
* 根据id查询用户信息
* @param id
* @return
*/
public User getUser(Integer id);
}
在service.impl包下定义对应的实现类UserServiceImpl。
package com.TandK.service.impl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.TandK.dao.UserDao;
import com.TandK.pojo.User;
import com.TandK.service.IUserService;
@Service
public class UserServiceImpl implements IUserService{
@Autowired
private UserDao userDao;
@Override
public User getUser(Integer id) {
// TODO Auto-generated method stub
return userDao.selectById(id);
}
}
- @Service是告诉SpringBoot这是一个service层的实现类;
- 写上@Autowired注解后SpringBoot会自动根据类型去注入对象,这就是Spring中IOC(控制反转的体现),即你不用自己去写
private UserDao userDao = new UserDao();
了 - 可以看到service层中维护着一个对应的Dao层对象,当需要什么数据直接用Dao层对象去数据库拿即可。
controller层
在Controller包下新建UserController类
package com.TandK.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import com.TandK.pojo.User;
import com.TandK.service.IUserService;
@Controller
public class UserController {
@Autowired
private IUserService userServiceImpl;
@RequestMapping("/getUser")
@ResponseBody
public User getUser(Integer id){
return userServiceImpl.getUser(id);
}
}
- 同样可以看到controller层中维护着一个对应的service层对象,当需要什么数据直接用service层对象去拿即可。
启动项目后访问
总结
教程到此结束,之后的使用基本照猫画虎,都差不多的,需要jar包去pom.xml下写对应的依赖,需要改什么配置就去application.properties里改,先百度一下写法,复制粘贴即可。
搭建过程只需做一次,之后的使用,除了添加jar包和改配置,多数情况下都是controller层调用service层,service层调用dao层,dao层连接数据库,然后逐层返回。这是最基本的使用。