从 SpringMVC 转为使用 SpringBoot —— 手把手带你使用 Intellij IDEA 最快速地搭建 SpringBoot+MyBatis(无 XML)+Thymeleaf

最近打算从SpringMVC的学习过渡到SpringBoot的学习,一直听说SpringBoot十分方便,便想探个究竟。

提示

篇幅可能较长,但这可能是最全最简单的一篇教程了,请抱着不厌其烦的态度去学习。无论你有没有SpringMVC的搭建基础,你都可以跟着本教程将SpringBoot正常驱动起来。

逐步重启测试能保证某段配置过程不出问题,请不要忽略掉文中多次要求重启的要求。

  1. 新建项目

20190221195713287.png

File -> New - >Project...

  1. 选择Spring Initlalizr

20190221200032765.png

Spring Initializr -> 在右侧Project SDK选择你配置的SDK(推荐JDK1.8) -> Next

如果你的IDEA中没有"Spring Initializr",说明你的IDEA是社区版(Community Editon)的,请更换版本为ULTIMATE。

  1. 配置项目属性

20190221200529999.png

修改:

Group:团队名,通常填写为com.xxx

Artifact:包名,通常填写该项目的名称

Name:项目名称

Description:项目描述

其它选项会自动配置,默认即可。

  1. 选择依赖库

20190221201048700.png

点击“Next”后,在“Dependencies”页面中,我们勾选以下几个库:

Web -> Web

Template Engines -> Thymeleaf

SQL -> MySQL

SQL -> JDBC

SQL -> MyBatis

  1. 项目配置

20190221201342529.png

在勾选完毕后,点击“Next”并设置“**项目名称”**和“项目所在的目录”可默认)。

  1. 等待自动配置

20190221201803372.png

点击“Finish”后,你会看到IDEA主界面的右下方有进度条在进行。如果你是第一次配置SpringBoot项目,这可能需要十分钟。耐心等候进度条消失后再继续进行下一步。

如果右下方出现了一个“Enable Auto-Import”选项,记得点击一下。

  1. 配置文件

20190221202423236.png

展开左侧的src -> main -> resources -> 编辑 application.properties:

 1#SpringBoot配置文件
 2//让SpringBoot支持热部署
 3spring.devtools.restart.enabled=true
 4#SpringBoot配置文件结束
 5
 6#MyBatis配置文件
 7//设置数据库的连接地址和使用的Database
 8spring.datasource.url=jdbc:mysql://127.0.0.1:3306/Users?useUnicode=true&characterEncoding=utf-8&autoReconnect=true&failOverReadOnly=false&allowMultiQueries=true
 9//设置数据库的用户名
10spring.datasource.username=root
11//设置数据库的密码
12spring.datasource.password=root
13//设置数据库的驱动
14spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
15#Mybatis配置文件结束
16
17#Thymeleaf配置文件
18//关闭Thymeleaf的缓存
19spring.thymeleaf.cache=false
20//设置Thymeleaf的类型
21spring.thymeleaf.servlet.content-type=text/html
22//启用Thymeleaf
23spring.thymeleaf.enabled=true
24//设置Thymeleaf的编码
25spring.thymeleaf.encoding=UTF-8
26//设置Thymeleaf的模式
27spring.thymeleaf.mode=HTML5
28//设置Thymeleaf的目录前缀
29spring.thymeleaf.prefix=classpath:/templates/
30//设置Thymeleaf的目录后缀
31spring.thymeleaf.suffix=.html
32#Thymeleaf配置文件结束

20190221202423236.png

其中的数据库配置请根据实际情况更改。

  1. 运行测试

20190221202856639.png

至此,我们完成了大部分的配置。由于SpringBoot已经内置了Tomcat,我们不需要再自行设置,点击IDEA右上方的“运行”按钮即可开启服务。

如果你在开启以后SpringBoot没有“自动关闭”,那么说明你的配置是正确的。让我们继续。

  1. Hello World!

现在我们可以创建一个“HelloWorld”程序了。

首先右键src -> main -> java -> com.xxx.xxx(你自己设定的)-> New -> Package -> 填写"controller" -> OK

然后右键你刚刚新建的“controller”包,选择New -> Java Class -> 填写“MainController” -> OK

(以上两步要求填写的内容可由你自己来定义)

新建完成后,如图所示。

20190221203341195.png

如下图所示将向该类中新建一个“HelloWorld”入口:

20190221203724240.png

@Controller:告知SpringBoot该类是控制器,控制器才能使@RequestMapping或@ResponseBody等生效;

@RequestMapping:告知控制器该注解下面的方法需要通过该注解指定的目录进行访问;

@ResponseBody:如果使用return返回String字符串,直接将字符串显示到页面上而不是将其理解为URL并跳转。

填写完毕后,重启SpringBoot!我们在浏览器中打开“localhost:8080/hello”,即可看到:

20190221203632150.png

  1. 测试Thymeleaf

现在我们的Controller(控制器)已经可以和用户进行正常的交互了。那么如果我们需要将该方法的内容传递到一个页面中,就需要用到Thymeleaf。如果不理解没关系,请继续往下看:

20190221204227941.png

现在我们将注意力转移到“resources”这个文件夹下,“static”中用于存放我们网页中的静态内容(CSS、JS等),“templates”用于存放我们可以与后台进行交互的HTML文件。

在“templates”文件夹中新建一个“index.html”:

 1<!DOCTYPE html>
 2<html xmlns:th="http://www.thymeleaf.org">
 3<html lang="en">
 4<head>
 5    <meta charset="UTF-8">
 6    <title>Demo测试</title>
 7</head>
 8<body>
 9这是一个Thymeleaf测试页面!
10</body>
11</html>

20190221204834422.png

请注意这行:

<html xmlns:th="http://www.thymeleaf.org">

如果不加入这行,你无法在IDEA中获取语法提示,所以这是必需的。

重启SpringBoot(稍后我们会将其配置为无需重启),然后在浏览器中访问“localhost:8080”测试(因为页面是index.html,这是默认的默认页,所以不需要加入文件名):

  1. 从Controller返回到index.html

现在,我们需要从后台返回数据到index.html

首先,在MainController.java中添加一个方法:

1@RequestMapping("/hi")
2    public ModelAndView hi() {
3        ModelAndView modelAndView = new ModelAndView("index");
4        modelAndView.addObject("result", "已连接到后台!");
5        return modelAndView;
6    }

20190221210038866.png

  1. 为什么没有使用@ResponseBody注解?
    首先我们不想要字符串直接返回给用户,并且我们规定返回了“ModelAndView”这个类。
  2. “new ModelAndView("index")”中的“index”为什么不是“index.html”?
    倒回去翻一下你的配置文件“application.properties”,看看最后一行的“prefix”和“suffix”配置项,SpringBoot会自动为你的返回值添加上前缀和后缀,所以“index”会自动被转换为“classpath:/templates/index.html”。
  3. “addObject”的用法?
    该方法需要传递两个值,用于返回给前端。第一个值是“Key(键)”,它是独一无二的,不得有重复,前端可以按照键名来获取第二个值(“Value(值)”)。

在index.html的body中随便找个地方添加一行:

<p th:text="${result}"></p>

更多的用法不是本教程的重点,请自行学习“Thymeleaf文档”。

运行!

继续不耐烦地重启你的SpringBoot,然后访问“localhost:8080/hi”:

20190221210038866.png

Awesome!你的Thymeleaf与ModelAndView已经正常运行了!

  1. 从数据库读取数据

如何在MySQL中建表我就不多讲了,如果不懂请翻阅入门教程。

在刚刚填写完的“application.properties”中,我们的数据库地址为:

spring.datasource.url=jdbc:mysql://127.0.0.1:3306/Users?useUnicode=true&characterEncoding=utf-8&autoReconnect=true&failOverReadOnly=false&allowMultiQueries=true

可以知道我们的数据库地址是127.0.0.1,连接的端口是默认的3306,使用的数据库是“Users”。

1. 建表

在“Users”数据库下,建立一个**表(Table)**名为“admin”:

该表中有两列数据:“id”和“name”,然后随便添加几行数据。

2. 新建Mapper

右键“com.xxx.xxx” -> New -> Package -> 填写“mapper” -> OK

然后右键你刚刚新建的“mapper”包 -> New -> Java Class -> 在“Kind”中选择“Interface” -> “Name”填写为“UserMapper” -> OK

201902212113368.png

3. 修改“UserMapper”中的内容

1import org.apache.ibatis.annotations.Mapper;
2import org.apache.ibatis.annotations.Select;
3
4@Mapper
5public interface UserMapper {
6    @Select("SELECT * FROM admin")
7    List<User> getUsers();
8}

@Mapper:向SpringBoot声明该接口是一个MyBatis接口

@Select:选择语句

4. 编写一个JavaBean

我们刚刚有一句语句List是报错的,因为我们还需要新建一个名为“User”的类作为返回数据的Bean。(如不懂JavaBean,请先使用百度了解)

右键“com.xxx.xxx” -> New -> Package -> 填写“dao” -> OK

右键刚刚新建的“DAO” -> New -> Java Class -> 填写“User” -> OK

此时回到“UserMapper”,将“User”类自行使用import语句导入。

import com.hotpot.demo.dao.User;

5. 编辑User类的内容

将“User”类中内容修改为:

 1public class User {
 2    private int id;
 3    private String name;
 4
 5    public void setId(int id) {
 6        this.id = id;
 7    }
 8
 9    public int getId() {
10        return id;
11    }
12
13    public void setName(String name) {
14        this.name = name;
15    }
16
17    public String getName() {
18        return name;
19    }
20}

很好,现在万事俱备了。

13) 调用UserMapper运行查询语句并返回结果

回到“MainController”,我们添加两个语句在“public class xxx{”的下一行

1@Autowired
2    UserMapper userMapper;

如果现在IDEA提示你错误,不要理会。

如果想去掉IDEA对该行的提示,点击右下角戴帽子的小老头,选择“Syntax”即可。

更新:在UserMapper接口的@Mapper一行下添加一行@Service,如下:

1@Mapper  
2@Service  
3public interface UserMapper {

@Service注解告诉SpringBoot,这是一个业务层Bean。

然后再添加一个方法

1@RequestMapping("/test")
2    public void test() {
3        List<User> list = userMapper.getUsers();
4        for (User i:list) {
5            System.out.print("id为:" + i.getId());
6            System.out.print("name为:" + i.getName() + "\n");
7        }
8    }

此方法涉及到了“foreach”和“List”的知识,如果不太懂请百度。

最后,在浏览器中访问“localhost:8080/test”:

虽然浏览器报错了但是在控制台中我们可以看到语句正常执行了。

报错是因为我填写的返回值是“void”为空,所以后端也不知道怎么返回,于是便抛出错误。

20190221213047760.png

以上是基础搭建的全部过程。如果想将List传回前端并遍历显示出来,请自行研究。不过我更喜欢使用JavaScript的JQuery使用JSON与后台进行交互。

  1. 让项目支持不重启即可生效

打开“pom.xml”,找到“</dependencies>”并在它的之前加入:

1<!-- hot swapping, disable cache for template, enable live reload -->
2        <dependency>
3            <groupId>org.springframework.boot</groupId>
4            <artifactId>spring-boot-devtools</artifactId>
5            <optional>true</optional>
6        </dependency>

然后继续等候右下角进度条消失。

再再再再重启一次......

享受快捷

现在,当你修改了Java或是html文件后,你都可以点击右上角的绿色小锤子Build”按钮,然后刷新下页面 —— 奇迹出现了!

最后

恭喜你踏出了SpringBoot学习的第一大步!现在你可以开始构建属于你自己的站点了!

如果这篇文章对你有所帮助,请帮助我点击右上方的“赞” || “评论” || “关注”!
如果你对内容有异议 || 问题,请在下方评论留言!

如转载请在文章尾部添加

原作者来自 adlered 个人技术博客:https://www.stackoverflow.wiki/

    评论
    1 评论
    2019-03-18 07:37 回复»

    感谢,讲的很详细,终于配置成功了!!!

avatar

取消