惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

N
News and Events Feed by Topic
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
月光博客
月光博客
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
大猫的无限游戏
大猫的无限游戏
T
Tailwind CSS Blog
S
SegmentFault 最新的问题
V
V2EX
阮一峰的网络日志
阮一峰的网络日志
C
Cisco Blogs
博客园 - 叶小钗
P
Privacy International News Feed
Jina AI
Jina AI
Apple Machine Learning Research
Apple Machine Learning Research
T
Threatpost
IT之家
IT之家
博客园 - 聂微东
Know Your Adversary
Know Your Adversary
Help Net Security
Help Net Security
罗磊的独立博客
I
Intezer
S
Schneier on Security
博客园_首页
C
CERT Recently Published Vulnerability Notes
雷峰网
雷峰网
Cisco Talos Blog
Cisco Talos Blog
宝玉的分享
宝玉的分享
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
Webroot Blog
Webroot Blog
TaoSecurity Blog
TaoSecurity Blog
MyScale Blog
MyScale Blog
P
Privacy & Cybersecurity Law Blog
T
The Exploit Database - CXSecurity.com
PCI Perspectives
PCI Perspectives
Security Latest
Security Latest
H
Heimdal Security Blog
S
Secure Thoughts
Hacker News: Ask HN
Hacker News: Ask HN
Y
Y Combinator Blog
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
Microsoft Security Blog
Microsoft Security Blog
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
SecWiki News
SecWiki News
The GitHub Blog
The GitHub Blog
A
Arctic Wolf
A
About on SuperTechFans
aimingoo的专栏
aimingoo的专栏
T
Threat Research - Cisco Blogs
Engineering at Meta
Engineering at Meta
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC

技术改变视野

为程序员、设计师打造的摸鱼社区:摸鱼派! - 技术改变视野 大白话 | Java初学指♂男:“说说初学的误区与死结”( 壹 | 反射与Field ) - 技术改变视野 大白话之耦合性:什么是耦合性和内聚性?用编程语言实例讲解! - 技术改变视野 🎨 适用于 Solo / Bolo 的清新高级主题 —— Sakura | 移植自 WordPress 主题 - 技术改变视野 我在 GitHub 上的开源项目 - 技术改变视野 为IDEA/Git配置GPG密钥,点亮GitHub Verified Commit标识 - 技术改变视野 无题 - 技术改变视野 年轻人的第一辆京牌电动车 - 技术改变视野 我们忙碌且漫长的一生,有多久是为自己而活? - 技术改变视野 一个最简单的实例理解Semaphore在Java中的作用 - 技术改变视野 说说《后浪》 - 技术改变视野 离线使用 Google Fonts:让你的网站更精致 | goofoffline 神器,一键下载生成离线字体库! - 技术改变视野 实例带你学会简单的Java Thread多线程 - 技术改变视野 一个实例理解Java的接口(interface)用处与用法 - 技术改变视野 一个实例带你理解JavaBean - 技术改变视野 WebFilter-SpringBoot过滤器注解实例讲解 - 技术改变视野 实例带你搞懂Java多线程&&线程池之(壹):线程池与多线程的关系和区别 - 技术改变视野 实例带你搞懂Java多线程&&线程池之(贰):简单的线程池应用 - 技术改变视野 实例带你获取多线程Thread的返回值之 (壹) - Callable的运行 - 技术改变视野 实例带你获取多线程Thread的返回值之 (贰) - Callable配合线程池返回数据 - 技术改变视野 一个实例理解Java Runnable多线程用处与用法 - 技术改变视野 从零开始OpenSSL之 (壹) - 使用genrsa、rsa、rsautl生成公私钥 - 技术改变视野 从零开始 OpenSSL 之 (贰) - 使用 rsautl 解密文件 - 技术改变视野 大白话之Docker(壹):快速入门&&简单官方实例 - 技术改变视野 大白话之Docker(贰):简单部署一个Tomcat服务并发布内容 - 技术改变视野 大白话之从零讲解DVWA(壹)-SQL注入(SQL Injection) Low Level - 技术改变视野 大白话之从零讲解DVWA(贰)-SQL注入(SQL Injection) Medium/High Level - 技术改变视野 Java日志插件-Slog4J下载 - 技术改变视野 大白话之必会Java Atomic | 线程一点也不安全(一):比自增和synchronized更快速、靠谱的原子操作(调用C语言) - 技术改变视野 Log-MySQL root用户登录后无法查看数据库全部表/正常访问数据库 Access denied for user 'root'@'localhost' to database - 技术改变视野 大白话之Docker(叁):制作一个运行Tomcat服务端的Docker镜像 - 技术改变视野 Github仅保留指定文件/文件夹当前Commit,删除所有历史记录,清除「敏感信息」 - 技术改变视野 将Tomcat、MySQL从Linux迁移到Windows的心路历程(干货):令人恐惧的字符编码 - 技术改变视野 Spring: java.lang.NoSuchMethodError: clearCache | ClassNotFoundException | Error during artifact deployment 思路及解决办法 - 技术改变视野 大白话之Java反射-初学最迷的概念:能干啥?咋用? - 技术改变视野 大白话之Java面向接口编程:最“正经”的中文实例讲解,看不懂来打我! - 技术改变视野 大白话 | 课堂实践:使用Iterator对数组进行遍历 - 技术改变视野 大白话之fail-fast | fail-safe:为什么会有这个机制?它有什么作用? - 技术改变视野 刨根问底 | 大白话:在使用注解后,框架是怎么知道你哪个方法使用了注解的?用@RequestMapping注解举例详解! - 技术改变视野 大白话之必会Java Atomic | 线程一点也不安全(二):Atomic的ABA问题会导致什么情况?如何解决? - 技术改变视野 随笔 | 奇淫技巧 | Java:记return和短路运算符的妙用 - 技术改变视野 随笔 | Tomcat:续-从Linux迁移到Windows编码问题彻底解决 - 技术改变视野 大白话之AutoClosable接口 | try-with-resources:JDK1.7的新特性,提高重复回收效率 - 技术改变视野 大白话之Java多线程join方法:开局一张图,试学一分钟,你就费和我一样,理解介个方法 - 技术改变视野 大白话之Java Stream流:将类数组流化,便捷批量修改,通俗讲解! - 技术改变视野 Java 困扰三周の问题:使用byte[]或skip()方法读取字节流Stream文件尾部多/少/缺字节解决方法 - 技术改变视野 大白话之Java级联调用:一个类,一条语句,同时调用好几个方法,串成一串 - 技术改变视野
从 SpringMVC 转为使用 SpringBoot —— 手把手带你使用 Intellij IDEA 最快速地搭建 SpringBoot+MyBatis(无 XML)+Thymeleaf - 技术改变视野
adlered · 2020-12-24 · via 技术改变视野

最近打算从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学习的第一大步!现在你可以开始构建属于你自己的站点了!

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