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

本贴最后更新于 2080 天前,其中的信息可能已经物是人非

v2718d4d9bb162a6a0bc71f1174c3bfd87hd.jpg

最近打算从 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:

#SpringBoot配置文件
//让SpringBoot支持热部署
spring.devtools.restart.enabled=true
#SpringBoot配置文件结束

#MyBatis配置文件
//设置数据库的连接地址和使用的Database
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/Users?useUnicode=true&characterEncoding=utf-8&autoReconnect=true&failOverReadOnly=false&allowMultiQueries=true
//设置数据库的用户名
spring.datasource.username=root
//设置数据库的密码
spring.datasource.password=root
//设置数据库的驱动
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
#Mybatis配置文件结束

#Thymeleaf配置文件
//关闭Thymeleaf的缓存
spring.thymeleaf.cache=false
//设置Thymeleaf的类型
spring.thymeleaf.servlet.content-type=text/html
//启用Thymeleaf
spring.thymeleaf.enabled=true
//设置Thymeleaf的编码
spring.thymeleaf.encoding=UTF-8
//设置Thymeleaf的模式
spring.thymeleaf.mode=HTML5
//设置Thymeleaf的目录前缀
spring.thymeleaf.prefix=classpath:/templates/
//设置Thymeleaf的目录后缀
spring.thymeleaf.suffix=.html
#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”:

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Demo测试</title>
</head>
<body>
这是一个Thymeleaf测试页面!
</body>
</html>

20190221204834422.png

请注意这行:

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

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

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

null

  1. 从 Controller 返回到 index.html

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

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

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

20190221210038866.png

  1. 为什么没有使用 @ResponseBody 注解?

首先我们不想要字符串直接返回给用户,并且我们规定返回了“ModelAndView”这个类。

  1. “new ModelAndView("index")”中的“index”为什么不是“index.html”?

倒回去翻一下你的配置文件“application.properties”,看看最后一行的“prefix”和“suffix”配置项,SpringBoot 会自动为你的返回值添加上前缀和后缀,所以“index”会自动被转换为“classpath:/templates/index.html”。

  1. “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”中的内容

import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;

@Mapper
public interface UserMapper {
    @Select("SELECT * FROM admin")
    List<User> getUsers();
} 

@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”类中内容修改为:

public class User {
    private int id;
    private String name;

    public void setId(int id) {
        this.id = id;
    }

    public int getId() {
        return id;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }
}

很好,现在万事俱备了。

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

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

 @Autowired
    UserMapper userMapper;

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

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

20190221212521323.png

然后再添加一个方法

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

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

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

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

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

20190221213047760.png

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

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

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

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

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

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

享受快捷

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

最后

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

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

  • Java

    Java 是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是由 Sun Microsystems 公司于 1995 年 5 月推出的。Java 技术具有卓越的通用性、高效性、平台移植性和安全性。

    3187 引用 • 8213 回帖
  • 代码
    467 引用 • 631 回帖 • 9 关注

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...