-
Notifications
You must be signed in to change notification settings - Fork 0
/
blog.sql
287 lines (260 loc) · 82.7 KB
/
blog.sql
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
/*
Navicat MySQL Data Transfer
Source Server : localhost_3306
Source Server Type : MySQL
Source Server Version : 80022
Source Host : localhost:3306
Source Schema : blog
Target Server Type : MySQL
Target Server Version : 80022
File Encoding : 65001
Date: 23/07/2021 11:37:46
*/
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
-- ----------------------------
-- Table structure for ms_admin
-- ----------------------------
DROP TABLE IF EXISTS `ms_admin`;
CREATE TABLE `ms_admin` (
`id` bigint(0) NOT NULL AUTO_INCREMENT,
`username` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL,
`password` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL,
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 3 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of ms_admin
-- ----------------------------
INSERT INTO `ms_admin` VALUES (1, 'admin', '$2a$10$RZECQ90DjOT/t1mhnXsl5.XSuZWc0Sa1XduPxj2rb4yaSYcje3nWW');
INSERT INTO `ms_admin` VALUES (2, 'mszlu', '$2a$10$RZECQ90DjOT/t1mhnXsl5.XSuZWc0Sa1XduPxj2rb4yaSYcje3nWW');
-- ----------------------------
-- Table structure for ms_admin_permission
-- ----------------------------
DROP TABLE IF EXISTS `ms_admin_permission`;
CREATE TABLE `ms_admin_permission` (
`id` bigint(0) NOT NULL AUTO_INCREMENT,
`admin_id` bigint(0) NOT NULL,
`permission_id` bigint(0) NOT NULL,
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 3 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of ms_admin_permission
-- ----------------------------
INSERT INTO `ms_admin_permission` VALUES (1, 1, 1);
INSERT INTO `ms_admin_permission` VALUES (2, 2, 1);
-- ----------------------------
-- Table structure for ms_article
-- ----------------------------
DROP TABLE IF EXISTS `ms_article`;
CREATE TABLE `ms_article` (
`id` bigint(0) NOT NULL AUTO_INCREMENT,
`comment_counts` int(0) NULL DEFAULT NULL COMMENT '评论数量',
`create_date` bigint(0) NULL DEFAULT NULL COMMENT '创建时间',
`summary` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '简介',
`title` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '标题',
`view_counts` int(0) NULL DEFAULT NULL COMMENT '浏览数量',
`weight` int(0) NOT NULL COMMENT '是否置顶',
`author_id` bigint(0) NULL DEFAULT NULL COMMENT '作者id',
`body_id` bigint(0) NULL DEFAULT NULL COMMENT '内容id',
`category_id` int(0) NULL DEFAULT NULL COMMENT '类别id',
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 1405916999732707331 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of ms_article
-- ----------------------------
INSERT INTO `ms_article` VALUES (1, 0, 1621947720727, '通过Spring Boot实现的服务,只需要依靠一个Java类,把它打包成jar,并通过`java -jar`命令就可以运行起来。\r\n\r\n这一切相较于传统Spring应用来说,已经变得非常的轻便、简单。', 'springboot介绍以及入门案例', 143, 0, 1, 1, 2);
INSERT INTO `ms_article` VALUES (2, 3, 1613947720727, 'Vue (读音 /vjuː/,类似于 view) 是一套用于构建用户界面的渐进式框架。', 'Vue.js 到底是什么', 91, 1, 1, 2, 2);
INSERT INTO `ms_article` VALUES (3, 0, 1523947720727, '本节将介绍如何在项目中使用 Element。', 'Element相关', 16, 1, 1, 3, 2);
INSERT INTO `ms_article` VALUES (4, 0, 1623947720727, '66666666666', '666666666666666', 2, 0, 1, 4, 2);
INSERT INTO `ms_article` VALUES (5, 0, 1624030002164, '123', '123123', 7, 0, 1, 5, 3);
INSERT INTO `ms_article` VALUES (6, 0, 1624031708047, 'springboot入门案例', 'SpringBoot入门案例', 9, 0, 1, 6, 2);
INSERT INTO `ms_article` VALUES (7, 0, 1627003414147, '124', '1243', 7, 0, 1, 7, 3);
INSERT INTO `ms_article` VALUES (8, 0, 1627005743663, '222', '222', 22, 0, 1, 8, 3);
INSERT INTO `ms_article` VALUES (12, 2, 1627009483834, '2333', '2333', 17, 0, 3, 12, 3);
INSERT INTO `ms_article` VALUES (13, 0, 1627010623896, '777', '777', 1, 0, 3, 13, 3);
INSERT INTO `ms_article` VALUES (14, 0, 1627010822798, '666', '666', 6, 0, 4, 14, 3);
-- ----------------------------
-- Table structure for ms_article_body
-- ----------------------------
DROP TABLE IF EXISTS `ms_article_body`;
CREATE TABLE `ms_article_body` (
`id` bigint(0) NOT NULL AUTO_INCREMENT,
`content` longtext CHARACTER SET utf8 COLLATE utf8_general_ci NULL,
`content_html` longtext CHARACTER SET utf8 COLLATE utf8_general_ci NULL,
`article_id` bigint(0) NOT NULL,
PRIMARY KEY (`id`) USING BTREE,
INDEX `article_id`(`article_id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 1405916999854342147 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of ms_article_body
-- ----------------------------
INSERT INTO `ms_article_body` VALUES (1, '# 1. Spring Boot介绍\r\n\r\n## 1.1 简介\r\n\r\n在您第1次接触和学习Spring框架的时候,是否因为其繁杂的配置而退却了?\r\n\r\n在你第n次使用Spring框架的时候,是否觉得一堆反复黏贴的配置有一些厌烦?\r\n\r\n那么您就不妨来试试使用Spring Boot来让你更易上手,更简单快捷地构建Spring应用!\r\n\r\nSpring Boot让我们的Spring应用变的更轻量化。\r\n\r\n我们不必像以前那样繁琐的构建项目、打包应用、部署到Tomcat等应用服务器中来运行我们的业务服务。\r\n\r\n通过Spring Boot实现的服务,只需要依靠一个Java类,把它打包成jar,并通过`java -jar`命令就可以运行起来。\r\n\r\n这一切相较于传统Spring应用来说,已经变得非常的轻便、简单。\r\n\r\n**总结一下Spring Boot的主要优点:**\r\n\r\n1. 为所有Spring开发者更快的入门\r\n2. 开箱即用,提供各种默认配置来简化项目配置\r\n3. 内嵌式容器简化Web项目\r\n4. 没有冗余代码生成和XML配置的要求\r\n5. 统一的依赖管理\r\n6. 自动装配,更易使用,更易扩展\r\n\r\n## 1.2 使用版本说明\r\n\r\nSpringboot版本:使用最新的2.5.0版本\r\n\r\n教程参考了官方文档进行制作,权威。\r\n\r\n其他依赖版本:\r\n\r\n 1. Maven 需求:3.5+\r\n\r\n 2. JDK 需求 8+\r\n 3. Spring Framework 5.3.7以上版本\r\n 4. Tomcat 9.0\r\n 5. Servlet版本 4.0 但是可以部署到Servlet到3.1+的容器中\r\n\r\n# 2. 快速入门\r\n\r\n快速的创建一个Spring Boot应用,并且实现一个简单的Http请求处理。通过这个例子对Spring Boot有一个初步的了解,并体验其结构简单、开发快速的特性。\r\n\r\n教程使用的Idea版本:2019.3\r\n\r\n## 2.1 创建基础项目\r\n\r\n**第一步:** 创建maven项目\r\n\r\npom.xml :\r\n\r\n~~~xml\r\n<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n<project xmlns=\"http://maven.apache.org/POM/4.0.0\"\r\n xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\r\n xsi:schemaLocation=\"http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd\">\r\n <modelVersion>4.0.0</modelVersion>\r\n\r\n <groupId>com.xiaopizhu</groupId>\r\n <artifactId>helloSpringBoot</artifactId>\r\n <version>1.0-SNAPSHOT</version>\r\n <!--springboot的父工程其中定义了常用的依赖,并且无依赖冲突-->\r\n <parent>\r\n <groupId>org.springframework.boot</groupId>\r\n <artifactId>spring-boot-starter-parent</artifactId>\r\n <version>2.5.0</version>\r\n </parent>\r\n</project>\r\n~~~\r\n\r\n注意上方的parent必须加,其中定义了springboot官方支持的n多依赖,基本上常用的已经有了,所以接下来导入依赖的时候,绝大部分都可以不加版本号。\r\n\r\n此时的工程结构为:\r\n\r\n![image-20210523173241557](img/image-20210523173241557.png)\r\n\r\n**第二步:** 添加web依赖\r\n\r\n~~~xml\r\n<dependencies>\r\n <dependency>\r\n <groupId>org.springframework.boot</groupId>\r\n <artifactId>spring-boot-starter-web</artifactId>\r\n </dependency>\r\n</dependencies>\r\n~~~\r\n\r\n添加上方的web依赖,其中间接依赖了spring-web,spring-webmvc,spring-core等spring和springmvc的包,并且集成了tomcat。\r\n\r\n**第三步:** 编写启动类\r\n\r\n~~~java\r\npackage com.xiaopizhu.springboot;\r\n\r\nimport org.springframework.boot.SpringApplication;\r\nimport org.springframework.boot.autoconfigure.SpringBootApplication;\r\n\r\n@SpringBootApplication\r\npublic class HelloApp {\r\n\r\n public static void main(String[] args) {\r\n SpringApplication.run(HelloApp.class,args);\r\n }\r\n}\r\n\r\n~~~\r\n\r\n@SpringBootApplication注解标识了HelloApp为启动类,也是Spring Boot的核心。\r\n\r\n**第四步:** 运行启动类的main方法\r\n\r\n![image-20210523173712142](img/image-20210523173712142.png)\r\n\r\n看到如上配置,证明启动成功,tomcat端口号默认为8080。\r\n\r\n**第五步:** 如果想要修改端口号,可以在resources目录下新建application.properties\r\n\r\n~~~properties\r\nserver.port=8082\r\n~~~\r\n\r\n**第六步:** 重新运行\r\n\r\n![image-20210523174011613](img/image-20210523174011613.png)\r\n\r\n此时的项目结构为:\r\n\r\n![image-20210523174032053](img/image-20210523174032053.png)\r\n\r\n**src/main/java :** 编写java代码,注意启动类需要放在项目的根包下。\r\n\r\n**src/main/resources:** 放置资源的目录,比如springboot的配置文件,静态文件,mybatis配置,日志配置等。\r\n\r\n**src/test/java:** 测试代码\r\n\r\n## 2.2 编写一个Http接口\r\n\r\n**第一步:**创建`HelloController`类,内容如下:\r\n\r\n~~~java\r\npackage com.xiaopizhu.springboot.controller;\r\n\r\nimport org.springframework.web.bind.annotation.GetMapping;\r\nimport org.springframework.web.bind.annotation.RequestMapping;\r\nimport org.springframework.web.bind.annotation.RestController;\r\n\r\n@RestController\r\n@RequestMapping(\"hello\")\r\npublic class HelloController {\r\n\r\n @GetMapping(\"boot\")\r\n public String hello(){\r\n return \"hello spring boot\";\r\n }\r\n\r\n}\r\n\r\n~~~\r\n\r\n**注意包名,必须在启动类所在的包名下。**\r\n\r\n**第二步:**重启程序,使用postman或者直接在浏览器输入http://localhost:8082/hello/boot\r\n\r\n得到结果:hello spring boot\r\n\r\n## 2.3 编写单元测试用例\r\n\r\n**第一步:**添加spring boot测试依赖\r\n\r\n~~~xml\r\n <dependency>\r\n <groupId>org.springframework.boot</groupId>\r\n <artifactId>spring-boot-starter-test</artifactId>\r\n <scope>test</scope>\r\n </dependency>\r\n~~~\r\n\r\n**第二步:**在src/test 下,编写测试用例\r\n\r\n~~~java\r\npackage com.xiaopizhu.springboot.controller;\r\n\r\nimport org.junit.jupiter.api.BeforeAll;\r\nimport org.junit.jupiter.api.BeforeEach;\r\nimport org.junit.jupiter.api.Test;\r\nimport org.springframework.boot.test.context.SpringBootTest;\r\nimport org.springframework.http.MediaType;\r\nimport org.springframework.test.web.servlet.MockMvc;\r\nimport org.springframework.test.web.servlet.request.MockMvcRequestBuilders;\r\nimport org.springframework.test.web.servlet.setup.MockMvcBuilders;\r\n\r\nimport static org.hamcrest.Matchers.equalTo;\r\nimport static org.springframework.test.web.servlet.result.MockMvcResultMatchers.content;\r\nimport static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;\r\n\r\n@SpringBootTest\r\npublic class TestHelloController {\r\n\r\n private MockMvc mockMvc;\r\n\r\n @BeforeEach\r\n public void beforeEach(){\r\n mockMvc = MockMvcBuilders.standaloneSetup(new HelloController()).build();\r\n }\r\n @Test\r\n public void testHello() throws Exception {\r\n mockMvc.perform(MockMvcRequestBuilders.get(\"/hello/boot\")\r\n .accept(MediaType.APPLICATION_JSON))\r\n .andExpect(status().isOk())\r\n .andExpect(content().string(equalTo(\"hello spring boot\")));\r\n }\r\n}\r\n\r\n~~~\r\n\r\n上面的测试用例,是构建一个空的`WebApplicationContext`,并且在before中加载了HelloController,得以在测试用例中mock调用,模拟请求。\r\n\r\n## 2.4 打包为jar运行\r\n\r\n**第一步:**添加打包(maven构建springboot)插件\r\n\r\n~~~xml\r\n <build>\r\n <plugins>\r\n <plugin>\r\n <groupId>org.springframework.boot</groupId>\r\n <artifactId>spring-boot-maven-plugin</artifactId>\r\n </plugin>\r\n </plugins>\r\n </build>\r\n~~~\r\n\r\n在idea的右侧 maven中,使用package来打包程序,打包完成后,在target目录下生成helloSpringBoot-1.0-SNAPSHOT.jar\r\n\r\n![image-20210523181737720](img/image-20210523181737720.png)\r\n\r\n**第二步:**打开cmd:找到jar对应的目录\r\n\r\n输入命令\r\n\r\n~~~shell\r\njava -jar helloSpringBoot-1.0-SNAPSHOT.jar\r\n~~~\r\n\r\n![image-20210523182426404](img/image-20210523182426404.png)\r\n\r\n**第三步:**测试,使用postman或者直接在浏览器输入http://localhost:8082/hello/boot\r\n\r\n得到结果:hello spring boot\r\n\r\n## 2.5 查看jar包内容\r\n\r\n~~~shell\r\njar tvf helloSpringBoot-1.0-SNAPSHOT.jar\r\n~~~\r\n\r\n# 3. 小结\r\n\r\n1. 通过Maven构建了一个空白Spring Boot项目,再通过引入web模块实现了一个简单的请求处理。\r\n2. 通过修改配置文件,更改端口号\r\n3. 编写了测试用例\r\n4. 打包jar包运行\r\n\r\n', '<h2>2018-01-04</h2>\n<pre><code class=\"lang-\"># 使用vue的Webpack模板生成脚手架\n</code></pre>\n<h2>2018-01-05</h2>\n<pre><code class=\"lang-\"># 引入ElementUI\n\n# babel-plugin-component自定义主题\n# 首页\n# 登陆页\n# 注册页面\n# 日志页\n</code></pre>\n<h2>2018-01-07</h2>\n<pre><code class=\"lang-\"># 调整底部栏始终固定在底部\n# 日志页 添加时间轴\n# 首页的文章列表\n</code></pre>\n<h2>2018-01-08</h2>\n<pre><code class=\"lang-\"># 使用组件-博客作者tab页 \n# 添加第三方图标\n</code></pre>\n<h2>2018-01-09</h2>\n<pre><code class=\"lang-\"># 调整顶部导航栏:激活文字颜色,click点击\n# 组件-最新文章tab页\n\n# 最新文章、最热文章使用相同组件\n# 底部栏设计\n# 页面与两边边距改为100\n</code></pre>\n<h2>2018-01-10</h2>\n<pre><code class=\"lang-\"># 写博客 引入mavonEditor编辑器\n# 顶部导航栏都放入一个Menu中\n# 写文章页面\n# mavonEditor局部引入\n\n# 页面的中间区域固定宽度,自动居中\n# 发布和取消\n# 发布dialog\n\n</code></pre>\n<h2>2018-01-11</h2>\n<pre><code class=\"lang-\"># 文章组件用守卫来改变body背景色\n# 调整登陆和注册页面,使其居中\n\n#子页面调整根元素为div\n#文章详情页\n\n</code></pre>\n<h2>2018-01-12</h2>\n<pre><code class=\"lang-\"># 文章详情页 内容 评论等\n\n</code></pre>\n<h2>2018-01-13</h2>\n<pre><code class=\"lang-\">## 重新调整页面结构 \n#顶部和底部 抽成 BaseHeader BaseFooter 组件\n#BlogView为单独页,以前是Home的子路由\n\n</code></pre>\n<h2>2018-01-15</h2>\n<pre><code class=\"lang-\"># 文章分类去掉子级\n# 将首页的文章列表抽成 ArticleItem组件\n# 增加文章的评论展示\n# 增加文章分类、标签页\n\n</code></pre>\n<h2>2018-01-15 2</h2>\n<pre><code class=\"lang-\"># 回到顶部去掉过渡动画(影响顶部导航栏)\n# 顶部导航栏 增加登录后菜单\n# 首页增加 最热标签\n# 增加 文章分类 标签的详情页\n# 将文章详情页、 文章分类标签页 改为Home的子路由(以前单独页)\n# Home组件增加路由判断:更正导航栏的状态、条件显示底部栏\n\n</code></pre>\n<h2>2018-01-16</h2>\n<pre><code class=\"lang-\"># 将写文章的顶部Header合并到BaseHeader中\n# 图片都放到了static目录下\n\n</code></pre>\n<h2>2018-01-24</h2>\n<pre><code class=\"lang-\"># 将自定义的theme放到assets下\n# 加入axios\n# 加入vuex\n# 实现登录\n# 实现退出\n\n</code></pre>\n<h2>2018-01-25</h2>\n<pre><code class=\"lang-\"># 实现注册逻辑\n# 写文章功能实现\n# 写文章时支持插入图片\n\n</code></pre>\n<h2>2018-01-26</h2>\n<pre><code class=\"lang-\"># 引入lodash工具类\n# 优化写文章的工具栏:滚动时固定顶部\n# 写文章 后台获取文章分类和标签\n\n# 首页的文章列表\n\n</code></pre>\n<h2>2018-01-27</h2>\n<pre><code class=\"lang-\"># 修改首页文章列表的样式\n# 首页加载文章功能\n# 文章查看功能\n# 文章分类和标签功能列表\n\n</code></pre>\n<h2>2018-01-28</h2>\n<pre><code class=\"lang-\"># 文章分类和标签详情\n\n</code></pre>\n<h2>2018-01-29</h2>\n<pre><code class=\"lang-\"># 文章分类和标签的文章数\n# 首页最热文章\n# 首页最新文章\n# 首页最热标签\n\n</code></pre>\n<h2>2018-01-30</h2>\n<pre><code class=\"lang-\"># BaseHeader放回views中\n# 修改Axios后置拦截,全局处理错误\n# 将登录 退出 和头像 放到一起\n\n</code></pre>\n', 1);
INSERT INTO `ms_article_body` VALUES (2, 'Vue (读音 /vjuː/,类似于 view) 是一套用于构建用户界面的渐进式框架。与其它大型框架不同的是,Vue 被设计为可以自底向上逐层应用。Vue 的核心库只关注视图层,不仅易于上手,还便于与第三方库或既有项目整合。另一方面,当与现代化的工具链以及各种支持类库结合使用时,Vue 也完全能够为复杂的单页应用提供驱动。\n\n如果你想在深入学习 Vue 之前对它有更多了解,我们制作了一个视频,带您了解其核心概念和一个示例工程。\n如果你已经是有经验的前端开发者,想知道 Vue 与其它库/框架有哪些区别,请查看对比其它框架。\n\n# 起步\n\n> 官方指南假设你已了解关于 HTML、CSS 和 JavaScript 的中级知识。如果你刚开始学习前端开发,将框架作为你的第一步可能不是最好的主意——掌握好基础知识再来吧!之前有其它框架的使用经验会有帮助,但这不是必需的。\n\n尝试 Vue.js 最简单的方法是使用 JSFiddle 上的 Hello World 例子。你可以在浏览器新标签页中打开它,跟着例子学习一些基础用法。或者你也可以创建一个 .html 文件,然后通过如下方式引入 Vue:\n\n```javascript\n<script src=\"https://cdn.jsdelivr.net/npm/vue\"></script>\n\n```\n安装教程给出了更多安装 Vue 的方式。请注意我们不推荐新手直接使用 vue-cli,尤其是在你还不熟悉基于 Node.js 的构建工具时。\n\n# 声明式渲染\nVue.js 的核心是一个允许采用简洁的模板语法来声明式地将数据渲染进 DOM 的系统:\n```javascript\n<div id=\"app\">\n {{ message }}\n</div>\n\n```\n```javascript\nvar app = new Vue({\n el: \'#app\',\n data: {\n message: \'Hello Vue!\'\n }\n})\n\n```\n我们已经成功创建了第一个 Vue 应用!看起来这跟渲染一个字符串模板非常类似,但是 Vue 在背后做了大量工作。现在数据和 DOM 已经被建立了关联,所有东西都是响应式的。我们要怎么确认呢?打开你的浏览器的 JavaScript 控制台 (就在这个页面打开),并修改 app.message 的值,你将看到上例相应地更新。\n\n除了文本插值,我们还可以像这样来绑定元素特性:\n\n\n\n\n\n\n', '<p>Vue (读音 /vjuː/,类似于 view) 是一套用于构建用户界面的渐进式框架。与其它大型框架不同的是,Vue 被设计为可以自底向上逐层应用。Vue 的核心库只关注视图层,不仅易于上手,还便于与第三方库或既有项目整合。另一方面,当与现代化的工具链以及各种支持类库结合使用时,Vue 也完全能够为复杂的单页应用提供驱动。</p>\n<p>如果你想在深入学习 Vue 之前对它有更多了解,我们制作了一个视频,带您了解其核心概念和一个示例工程。<br />\n如果你已经是有经验的前端开发者,想知道 Vue 与其它库/框架有哪些区别,请查看对比其它框架。</p>\n<h1>起步</h1>\n<blockquote>\n<p>官方指南假设你已了解关于 HTML、CSS 和 JavaScript 的中级知识。如果你刚开始学习前端开发,将框架作为你的第一步可能不是最好的主意——掌握好基础知识再来吧!之前有其它框架的使用经验会有帮助,但这不是必需的。</p>\n</blockquote>\n<p>尝试 Vue.js 最简单的方法是使用 JSFiddle 上的 Hello World 例子。你可以在浏览器新标签页中打开它,跟着例子学习一些基础用法。或者你也可以创建一个 .html 文件,然后通过如下方式引入 Vue:</p>\n<pre><div class=\"hljs\"><code class=\"lang-javascript\"><script src=<span class=\"hljs-string\">\"https://cdn.jsdelivr.net/npm/vue\"</span>><span class=\"xml\"><span class=\"hljs-tag\"></<span class=\"hljs-name\">script</span>></span></span>\n\n</code></div></pre>\n<p>安装教程给出了更多安装 Vue 的方式。请注意我们不推荐新手直接使用 vue-cli,尤其是在你还不熟悉基于 Node.js 的构建工具时。</p>\n<h1>声明式渲染</h1>\n<p>Vue.js 的核心是一个允许采用简洁的模板语法来声明式地将数据渲染进 DOM 的系统:</p>\n<pre><div class=\"hljs\"><code class=\"lang-javascript\"><div id=<span class=\"hljs-string\">\"app\"</span>>\n {{ message }}\n<<span class=\"hljs-regexp\">/div>\n\n</span></code></div></pre>\n<pre><div class=\"hljs\"><code class=\"lang-javascript\"><span class=\"hljs-keyword\">var</span> app = <span class=\"hljs-keyword\">new</span> Vue({\n <span class=\"hljs-attr\">el</span>: <span class=\"hljs-string\">\'#app\'</span>,\n <span class=\"hljs-attr\">data</span>: {\n <span class=\"hljs-attr\">message</span>: <span class=\"hljs-string\">\'Hello Vue!\'</span>\n }\n})\n\n</code></div></pre>\n<p>我们已经成功创建了第一个 Vue 应用!看起来这跟渲染一个字符串模板非常类似,但是 Vue 在背后做了大量工作。现在数据和 DOM 已经被建立了关联,所有东西都是响应式的。我们要怎么确认呢?打开你的浏览器的 JavaScript 控制台 (就在这个页面打开),并修改 app.message 的值,你将看到上例相应地更新。</p>\n<p>除了文本插值,我们还可以像这样来绑定元素特性:</p>\n', 2);
INSERT INTO `ms_article_body` VALUES (3, '## 快速上手\n\n本节将介绍如何在项目中使用 Element。\n\n### 使用 Starter Kit\n我们提供了通用的项目模板,你可以直接使用。对于 Laravel 用户,我们也准备了相应的模板,同样可以直接下载使用。\n\n如果不希望使用我们提供的模板,请继续阅读。\n\n### 使用 vue-cli\n\n我们还可以使用 vue-cli 初始化项目,命令如下:\n\n```language\n> npm i -g vue-cli\n> mkdir my-project && cd my-project\n> vue init webpack\n> npm i && npm i element-ui\n```\n\n### 引入 Element\n你可以引入整个 Element,或是根据需要仅引入部分组件。我们先介绍如何引入完整的 Element。\n\n#### 完整引入\n在 main.js 中写入以下内容:\n```javascript\nimport Vue from \'vue\'\nimport ElementUI from \'element-ui\'\nimport \'element-ui/lib/theme-chalk/index.css\'\nimport App from \'./App.vue\'\n\nVue.use(ElementUI)\n\nnew Vue({\n el: \'#app\',\n render: h => h(App)\n})\n\n```\n以上代码便完成了 Element 的引入。需要注意的是,样式文件需要单独引入。\n\n#### 按需引入\n借助 babel-plugin-component,我们可以只引入需要的组件,以达到减小项目体积的目的。\n\n首先,安装 babel-plugin-component:\n\n', '<h2>快速上手</h2>\n<p>本节将介绍如何在项目中使用 Element。</p>\n<h3>使用 Starter Kit</h3>\n<p>我们提供了通用的项目模板,你可以直接使用。对于 Laravel 用户,我们也准备了相应的模板,同样可以直接下载使用。</p>\n<p>如果不希望使用我们提供的模板,请继续阅读。</p>\n<h3>使用 vue-cli</h3>\n<p>我们还可以使用 vue-cli 初始化项目,命令如下:</p>\n<pre><code class=\"lang-language\">> npm i -g vue-cli\n> mkdir my-project && cd my-project\n> vue init webpack\n> npm i && npm i element-ui\n</code></pre>\n<h3>引入 Element</h3>\n<p>你可以引入整个 Element,或是根据需要仅引入部分组件。我们先介绍如何引入完整的 Element。</p>\n<h4>完整引入</h4>\n<p>在 main.js 中写入以下内容:</p>\n<pre><div class=\"hljs\"><code class=\"lang-javascript\"><span class=\"hljs-keyword\">import</span> Vue <span class=\"hljs-keyword\">from</span> <span class=\"hljs-string\">\'vue\'</span>\n<span class=\"hljs-keyword\">import</span> ElementUI <span class=\"hljs-keyword\">from</span> <span class=\"hljs-string\">\'element-ui\'</span>\n<span class=\"hljs-keyword\">import</span> <span class=\"hljs-string\">\'element-ui/lib/theme-chalk/index.css\'</span>\n<span class=\"hljs-keyword\">import</span> App <span class=\"hljs-keyword\">from</span> <span class=\"hljs-string\">\'./App.vue\'</span>\n\nVue.use(ElementUI)\n\n<span class=\"hljs-keyword\">new</span> Vue({\n <span class=\"hljs-attr\">el</span>: <span class=\"hljs-string\">\'#app\'</span>,\n <span class=\"hljs-attr\">render</span>: <span class=\"hljs-function\"><span class=\"hljs-params\">h</span> =></span> h(App)\n})\n\n</code></div></pre>\n<p>以上代码便完成了 Element 的引入。需要注意的是,样式文件需要单独引入。</p>\n<h4>按需引入</h4>\n<p>借助 babel-plugin-component,我们可以只引入需要的组件,以达到减小项目体积的目的。</p>\n<p>首先,安装 babel-plugin-component:</p>\n', 3);
INSERT INTO `ms_article_body` VALUES (4, '666666666666', '<p>666666666666</p>\n', 4);
INSERT INTO `ms_article_body` VALUES (5, '# 1. Spring Boot介绍\n\n## 1.1 简介\n\n在您第1次接触和学习Spring框架的时候,是否因为其繁杂的配置而退却了?\n\n在你第n次使用Spring框架的时候,是否觉得一堆反复黏贴的配置有一些厌烦?\n\n那么您就不妨来试试使用Spring Boot来让你更易上手,更简单快捷地构建Spring应用!\n\nSpring Boot让我们的Spring应用变的更轻量化。\n\n我们不必像以前那样繁琐的构建项目、打包应用、部署到Tomcat等应用服务器中来运行我们的业务服务。\n\n通过Spring Boot实现的服务,只需要依靠一个Java类,把它打包成jar,并通过`java -jar`命令就可以运行起来。\n\n这一切相较于传统Spring应用来说,已经变得非常的轻便、简单。\n\n**总结一下Spring Boot的主要优点:**\n\n1. 为所有Spring开发者更快的入门\n2. 开箱即用,提供各种默认配置来简化项目配置\n3. 内嵌式容器简化Web项目\n4. 没有冗余代码生成和XML配置的要求\n5. 统一的依赖管理\n6. 自动装配,更易使用,更易扩展\n\n## 1.2 使用版本说明\n\nSpringboot版本:使用最新的2.5.0版本\n\n教程参考了官方文档进行制作,权威。\n\n其他依赖版本:\n\n 1. Maven 需求:3.5+\n\n 2. JDK 需求 8+\n 3. Spring Framework 5.3.7以上版本\n 4. Tomcat 9.0\n 5. Servlet版本 4.0 但是可以部署到Servlet到3.1+的容器中\n\n# 2. 快速入门\n\n快速的创建一个Spring Boot应用,并且实现一个简单的Http请求处理。通过这个例子对Spring Boot有一个初步的了解,并体验其结构简单、开发快速的特性。\n\n教程使用的Idea版本:2019.3\n\n## 2.1 创建基础项目\n\n**第一步:** 创建maven项目\n\npom.xml :\n\n~~~xml\n<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project xmlns=\"http://maven.apache.org/POM/4.0.0\"\n xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n xsi:schemaLocation=\"http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd\">\n <modelVersion>4.0.0</modelVersion>\n\n <groupId>com.xiaopizhu</groupId>\n <artifactId>helloSpringBoot</artifactId>\n <version>1.0-SNAPSHOT</version>\n <!--springboot的父工程其中定义了常用的依赖,并且无依赖冲突-->\n <parent>\n <groupId>org.springframework.boot</groupId>\n <artifactId>spring-boot-starter-parent</artifactId>\n <version>2.5.0</version>\n </parent>\n</project>\n~~~\n\n注意上方的parent必须加,其中定义了springboot官方支持的n多依赖,基本上常用的已经有了,所以接下来导入依赖的时候,绝大部分都可以不加版本号。\n\n此时的工程结构为:\n\n![image20210523173241557.png](https://static.mszlu.com/6fc39758-0db2-431d-9f94-a705aa2c7e59.png)\n\n**第二步:** 添加web依赖\n\n~~~xml\n<dependencies>\n <dependency>\n <groupId>org.springframework.boot</groupId>\n <artifactId>spring-boot-starter-web</artifactId>\n </dependency>\n</dependencies>\n~~~\n\n添加上方的web依赖,其中间接依赖了spring-web,spring-webmvc,spring-core等spring和springmvc的包,并且集成了tomcat。\n\n**第三步:** 编写启动类\n\n~~~java\npackage com.xiaopizhu.springboot;\n\nimport org.springframework.boot.SpringApplication;\nimport org.springframework.boot.autoconfigure.SpringBootApplication;\n\n@SpringBootApplication\npublic class HelloApp {\n\n public static void main(String[] args) {\n SpringApplication.run(HelloApp.class,args);\n }\n}\n\n~~~\n\n@SpringBootApplication注解标识了HelloApp为启动类,也是Spring Boot的核心。\n\n**第四步:** 运行启动类的main方法\n\n![image-20210523173712142](img/image-20210523173712142.png)\n\n看到如上配置,证明启动成功,tomcat端口号默认为8080。\n\n**第五步:** 如果想要修改端口号,可以在resources目录下新建application.properties\n\n~~~properties\nserver.port=8082\n~~~\n\n**第六步:** 重新运行\n\n![image-20210523174011613](img/image-20210523174011613.png)\n\n此时的项目结构为:\n\n![image-20210523174032053](img/image-20210523174032053.png)\n\n**src/main/java :** 编写java代码,注意启动类需要放在项目的根包下。\n\n**src/main/resources:** 放置资源的目录,比如springboot的配置文件,静态文件,mybatis配置,日志配置等。\n\n**src/test/java:** 测试代码\n\n## 2.2 编写一个Http接口\n\n**第一步:** 创建`HelloController`类,内容如下:\n\n~~~java\npackage com.xiaopizhu.springboot.controller;\n\nimport org.springframework.web.bind.annotation.GetMapping;\nimport org.springframework.web.bind.annotation.RequestMapping;\nimport org.springframework.web.bind.annotation.RestController;\n\n@RestController\n@RequestMapping(\"hello\")\npublic class HelloController {\n\n @GetMapping(\"boot\")\n public String hello(){\n return \"hello spring boot\";\n }\n\n}\n\n~~~\n\n**注意包名,必须在启动类所在的包名下。**\n\n**第二步: ** 重启程序,使用postman或者直接在浏览器输入http://localhost:8082/hello/boot\n\n得到结果:hello spring boot\n\n## 2.3 编写单元测试用例\n\n**第一步: ** 添加spring boot测试依赖\n\n~~~xml\n <dependency>\n <groupId>org.springframework.boot</groupId>\n <artifactId>spring-boot-starter-test</artifactId>\n <scope>test</scope>\n </dependency>\n~~~\n\n**第二步:** 在src/test 下,编写测试用例\n\n~~~java\npackage com.xiaopizhu.springboot.controller;\n\nimport org.junit.jupiter.api.BeforeAll;\nimport org.junit.jupiter.api.BeforeEach;\nimport org.junit.jupiter.api.Test;\nimport org.springframework.boot.test.context.SpringBootTest;\nimport org.springframework.http.MediaType;\nimport org.springframework.test.web.servlet.MockMvc;\nimport org.springframework.test.web.servlet.request.MockMvcRequestBuilders;\nimport org.springframework.test.web.servlet.setup.MockMvcBuilders;\n\nimport static org.hamcrest.Matchers.equalTo;\nimport static org.springframework.test.web.servlet.result.MockMvcResultMatchers.content;\nimport static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;\n\n@SpringBootTest\npublic class TestHelloController {\n\n private MockMvc mockMvc;\n\n @BeforeEach\n public void beforeEach(){\n mockMvc = MockMvcBuilders.standaloneSetup(new HelloController()).build();\n }\n @Test\n public void testHello() throws Exception {\n mockMvc.perform(MockMvcRequestBuilders.get(\"/hello/boot\")\n .accept(MediaType.APPLICATION_JSON))\n .andExpect(status().isOk())\n .andExpect(content().string(equalTo(\"hello spring boot\")));\n }\n}\n\n~~~\n\n上面的测试用例,是构建一个空的`WebApplicationContext`,并且在before中加载了HelloController,得以在测试用例中mock调用,模拟请求。\n\n## 2.4 打包为jar运行\n\n**第一步:** 添加打包(maven构建springboot)插件\n\n~~~xml\n <build>\n <plugins>\n <plugin>\n <groupId>org.springframework.boot</groupId>\n <artifactId>spring-boot-maven-plugin</artifactId>\n </plugin>\n </plugins>\n </build>\n~~~\n\n在idea的右侧 maven中,使用package来打包程序,打包完成后,在target目录下生成helloSpringBoot-1.0-SNAPSHOT.jar\n\n![image-20210523181737720](img/image-20210523181737720.png)\n\n**第二步: ** 打开cmd:找到jar对应的目录\n\n输入命令\n\n~~~shell\njava -jar helloSpringBoot-1.0-SNAPSHOT.jar\n~~~\n\n![image-20210523182426404](img/image-20210523182426404.png)\n\n**第三步:** 测试,使用postman或者直接在浏览器输入http://localhost:8082/hello/boot\n\n得到结果:hello spring boot\n\n## 2.5 查看jar包内容\n\n~~~shell\njar tvf helloSpringBoot-1.0-SNAPSHOT.jar\n~~~\n\n# 3. 小结\n\n1. 通过Maven构建了一个空白Spring Boot项目,再通过引入web模块实现了一个简单的请求处理。\n2. 通过修改配置文件,更改端口号\n3. 编写了测试用例\n4. 打包jar包运行\n\n', '<h1><a id=\"1_Spring_Boot_0\"></a>1. Spring Boot介绍</h1>\n<h2><a id=\"11__2\"></a>1.1 简介</h2>\n<p>在您第1次接触和学习Spring框架的时候,是否因为其繁杂的配置而退却了?</p>\n<p>在你第n次使用Spring框架的时候,是否觉得一堆反复黏贴的配置有一些厌烦?</p>\n<p>那么您就不妨来试试使用Spring Boot来让你更易上手,更简单快捷地构建Spring应用!</p>\n<p>Spring Boot让我们的Spring应用变的更轻量化。</p>\n<p>我们不必像以前那样繁琐的构建项目、打包应用、部署到Tomcat等应用服务器中来运行我们的业务服务。</p>\n<p>通过Spring Boot实现的服务,只需要依靠一个Java类,把它打包成jar,并通过<code>java -jar</code>命令就可以运行起来。</p>\n<p>这一切相较于传统Spring应用来说,已经变得非常的轻便、简单。</p>\n<p><strong>总结一下Spring Boot的主要优点:</strong></p>\n<ol>\n<li>为所有Spring开发者更快的入门</li>\n<li>开箱即用,提供各种默认配置来简化项目配置</li>\n<li>内嵌式容器简化Web项目</li>\n<li>没有冗余代码生成和XML配置的要求</li>\n<li>统一的依赖管理</li>\n<li>自动装配,更易使用,更易扩展</li>\n</ol>\n<h2><a id=\"12__27\"></a>1.2 使用版本说明</h2>\n<p>Springboot版本:使用最新的2.5.0版本</p>\n<p>教程参考了官方文档进行制作,权威。</p>\n<p>其他依赖版本:</p>\n<pre><code>1. Maven 需求:3.5+\n\n2. JDK 需求 8+\n3. Spring Framework 5.3.7以上版本\n4. Tomcat 9.0\n5. Servlet版本 4.0 但是可以部署到Servlet到3.1+的容器中\n</code></pre>\n<h1><a id=\"2__42\"></a>2. 快速入门</h1>\n<p>快速的创建一个Spring Boot应用,并且实现一个简单的Http请求处理。通过这个例子对Spring Boot有一个初步的了解,并体验其结构简单、开发快速的特性。</p>\n<p>教程使用的Idea版本:2019.3</p>\n<h2><a id=\"21__48\"></a>2.1 创建基础项目</h2>\n<p><strong>第一步:</strong> 创建maven项目</p>\n<p>pom.xml :</p>\n<pre><div class=\"hljs\"><code class=\"lang-xml\"><span class=\"php\"><span class=\"hljs-meta\"><?</span>xml version=<span class=\"hljs-string\">\"1.0\"</span> encoding=<span class=\"hljs-string\">\"UTF-8\"</span><span class=\"hljs-meta\">?></span></span>\n<span class=\"hljs-tag\"><<span class=\"hljs-name\">project</span> <span class=\"hljs-attr\">xmlns</span>=<span class=\"hljs-string\">\"http://maven.apache.org/POM/4.0.0\"</span>\n <span class=\"hljs-attr\">xmlns:xsi</span>=<span class=\"hljs-string\">\"http://www.w3.org/2001/XMLSchema-instance\"</span>\n <span class=\"hljs-attr\">xsi:schemaLocation</span>=<span class=\"hljs-string\">\"http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd\"</span>></span>\n <span class=\"hljs-tag\"><<span class=\"hljs-name\">modelVersion</span>></span>4.0.0<span class=\"hljs-tag\"></<span class=\"hljs-name\">modelVersion</span>></span>\n\n <span class=\"hljs-tag\"><<span class=\"hljs-name\">groupId</span>></span>com.xiaopizhu<span class=\"hljs-tag\"></<span class=\"hljs-name\">groupId</span>></span>\n <span class=\"hljs-tag\"><<span class=\"hljs-name\">artifactId</span>></span>helloSpringBoot<span class=\"hljs-tag\"></<span class=\"hljs-name\">artifactId</span>></span>\n <span class=\"hljs-tag\"><<span class=\"hljs-name\">version</span>></span>1.0-SNAPSHOT<span class=\"hljs-tag\"></<span class=\"hljs-name\">version</span>></span>\n <span class=\"hljs-comment\"><!--springboot的父工程其中定义了常用的依赖,并且无依赖冲突--></span>\n <span class=\"hljs-tag\"><<span class=\"hljs-name\">parent</span>></span>\n <span class=\"hljs-tag\"><<span class=\"hljs-name\">groupId</span>></span>org.springframework.boot<span class=\"hljs-tag\"></<span class=\"hljs-name\">groupId</span>></span>\n <span class=\"hljs-tag\"><<span class=\"hljs-name\">artifactId</span>></span>spring-boot-starter-parent<span class=\"hljs-tag\"></<span class=\"hljs-name\">artifactId</span>></span>\n <span class=\"hljs-tag\"><<span class=\"hljs-name\">version</span>></span>2.5.0<span class=\"hljs-tag\"></<span class=\"hljs-name\">version</span>></span>\n <span class=\"hljs-tag\"></<span class=\"hljs-name\">parent</span>></span>\n<span class=\"hljs-tag\"></<span class=\"hljs-name\">project</span>></span>\n</code></div></pre>\n<p>注意上方的parent必须加,其中定义了springboot官方支持的n多依赖,基本上常用的已经有了,所以接下来导入依赖的时候,绝大部分都可以不加版本号。</p>\n<p>此时的工程结构为:</p>\n<p><img src=\"https://static.mszlu.com/6fc39758-0db2-431d-9f94-a705aa2c7e59.png\" alt=\"image20210523173241557.png\" /></p>\n<p><strong>第二步:</strong> 添加web依赖</p>\n<pre><div class=\"hljs\"><code class=\"lang-xml\"><span class=\"hljs-tag\"><<span class=\"hljs-name\">dependencies</span>></span>\n <span class=\"hljs-tag\"><<span class=\"hljs-name\">dependency</span>></span>\n <span class=\"hljs-tag\"><<span class=\"hljs-name\">groupId</span>></span>org.springframework.boot<span class=\"hljs-tag\"></<span class=\"hljs-name\">groupId</span>></span>\n <span class=\"hljs-tag\"><<span class=\"hljs-name\">artifactId</span>></span>spring-boot-starter-web<span class=\"hljs-tag\"></<span class=\"hljs-name\">artifactId</span>></span>\n <span class=\"hljs-tag\"></<span class=\"hljs-name\">dependency</span>></span>\n<span class=\"hljs-tag\"></<span class=\"hljs-name\">dependencies</span>></span>\n</code></div></pre>\n<p>添加上方的web依赖,其中间接依赖了spring-web,spring-webmvc,spring-core等spring和springmvc的包,并且集成了tomcat。</p>\n<p><strong>第三步:</strong> 编写启动类</p>\n<pre><div class=\"hljs\"><code class=\"lang-java\"><span class=\"hljs-keyword\">package</span> com.xiaopizhu.springboot;\n\n<span class=\"hljs-keyword\">import</span> org.springframework.boot.SpringApplication;\n<span class=\"hljs-keyword\">import</span> org.springframework.boot.autoconfigure.SpringBootApplication;\n\n<span class=\"hljs-meta\">@SpringBootApplication</span>\n<span class=\"hljs-keyword\">public</span> <span class=\"hljs-class\"><span class=\"hljs-keyword\">class</span> <span class=\"hljs-title\">HelloApp</span> </span>{\n\n <span class=\"hljs-function\"><span class=\"hljs-keyword\">public</span> <span class=\"hljs-keyword\">static</span> <span class=\"hljs-keyword\">void</span> <span class=\"hljs-title\">main</span><span class=\"hljs-params\">(String[] args)</span> </span>{\n SpringApplication.run(HelloApp.class,args);\n }\n}\n\n</code></div></pre>\n<p>@SpringBootApplication注解标识了HelloApp为启动类,也是Spring Boot的核心。</p>\n<p><strong>第四步:</strong> 运行启动类的main方法</p>\n<p><img src=\"img/image-20210523173712142.png\" alt=\"image-20210523173712142\" /></p>\n<p>看到如上配置,证明启动成功,tomcat端口号默认为8080。</p>\n<p><strong>第五步:</strong> 如果想要修改端口号,可以在resources目录下新建application.properties</p>\n<pre><code class=\"lang-properties\">server.port=8082\n</code></pre>\n<p><strong>第六步:</strong> 重新运行</p>\n<p><img src=\"img/image-20210523174011613.png\" alt=\"image-20210523174011613\" /></p>\n<p>此时的项目结构为:</p>\n<p><img src=\"img/image-20210523174032053.png\" alt=\"image-20210523174032053\" /></p>\n<p><strong>src/main/java :</strong> 编写java代码,注意启动类需要放在项目的根包下。</p>\n<p><strong>src/main/resources:</strong> 放置资源的目录,比如springboot的配置文件,静态文件,mybatis配置,日志配置等。</p>\n<p><strong>src/test/java:</strong> 测试代码</p>\n<h2><a id=\"22_Http_138\"></a>2.2 编写一个Http接口</h2>\n<p><strong>第一步:</strong> 创建<code>HelloController</code>类,内容如下:</p>\n<pre><div class=\"hljs\"><code class=\"lang-java\"><span class=\"hljs-keyword\">package</span> com.xiaopizhu.springboot.controller;\n\n<span class=\"hljs-keyword\">import</span> org.springframework.web.bind.annotation.GetMapping;\n<span class=\"hljs-keyword\">import</span> org.springframework.web.bind.annotation.RequestMapping;\n<span class=\"hljs-keyword\">import</span> org.springframework.web.bind.annotation.RestController;\n\n<span class=\"hljs-meta\">@RestController</span>\n<span class=\"hljs-meta\">@RequestMapping</span>(<span class=\"hljs-string\">\"hello\"</span>)\n<span class=\"hljs-keyword\">public</span> <span class=\"hljs-class\"><span class=\"hljs-keyword\">class</span> <span class=\"hljs-title\">HelloController</span> </span>{\n\n <span class=\"hljs-meta\">@GetMapping</span>(<span class=\"hljs-string\">\"boot\"</span>)\n <span class=\"hljs-function\"><span class=\"hljs-keyword\">public</span> String <span class=\"hljs-title\">hello</span><span class=\"hljs-params\">()</span></span>{\n <span class=\"hljs-keyword\">return</span> <span class=\"hljs-string\">\"hello spring boot\"</span>;\n }\n\n}\n\n</code></div></pre>\n<p><strong>注意包名,必须在启动类所在的包名下。</strong></p>\n<p>**第二步: ** 重启程序,使用postman或者直接在浏览器输入http://localhost:8082/hello/boot</p>\n<p>得到结果:hello spring boot</p>\n<h2><a id=\"23__168\"></a>2.3 编写单元测试用例</h2>\n<p>**第一步: ** 添加spring boot测试依赖</p>\n<pre><div class=\"hljs\"><code class=\"lang-xml\"> <span class=\"hljs-tag\"><<span class=\"hljs-name\">dependency</span>></span>\n <span class=\"hljs-tag\"><<span class=\"hljs-name\">groupId</span>></span>org.springframework.boot<span class=\"hljs-tag\"></<span class=\"hljs-name\">groupId</span>></span>\n <span class=\"hljs-tag\"><<span class=\"hljs-name\">artifactId</span>></span>spring-boot-starter-test<span class=\"hljs-tag\"></<span class=\"hljs-name\">artifactId</span>></span>\n <span class=\"hljs-tag\"><<span class=\"hljs-name\">scope</span>></span>test<span class=\"hljs-tag\"></<span class=\"hljs-name\">scope</span>></span>\n <span class=\"hljs-tag\"></<span class=\"hljs-name\">dependency</span>></span>\n</code></div></pre>\n<p><strong>第二步:</strong> 在src/test 下,编写测试用例</p>\n<pre><div class=\"hljs\"><code class=\"lang-java\"><span class=\"hljs-keyword\">package</span> com.xiaopizhu.springboot.controller;\n\n<span class=\"hljs-keyword\">import</span> org.junit.jupiter.api.BeforeAll;\n<span class=\"hljs-keyword\">import</span> org.junit.jupiter.api.BeforeEach;\n<span class=\"hljs-keyword\">import</span> org.junit.jupiter.api.Test;\n<span class=\"hljs-keyword\">import</span> org.springframework.boot.test.context.SpringBootTest;\n<span class=\"hljs-keyword\">import</span> org.springframework.http.MediaType;\n<span class=\"hljs-keyword\">import</span> org.springframework.test.web.servlet.MockMvc;\n<span class=\"hljs-keyword\">import</span> org.springframework.test.web.servlet.request.MockMvcRequestBuilders;\n<span class=\"hljs-keyword\">import</span> org.springframework.test.web.servlet.setup.MockMvcBuilders;\n\n<span class=\"hljs-keyword\">import</span> <span class=\"hljs-keyword\">static</span> org.hamcrest.Matchers.equalTo;\n<span class=\"hljs-keyword\">import</span> <span class=\"hljs-keyword\">static</span> org.springframework.test.web.servlet.result.MockMvcResultMatchers.content;\n<span class=\"hljs-keyword\">import</span> <span class=\"hljs-keyword\">static</span> org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;\n\n<span class=\"hljs-meta\">@SpringBootTest</span>\n<span class=\"hljs-keyword\">public</span> <span class=\"hljs-class\"><span class=\"hljs-keyword\">class</span> <span class=\"hljs-title\">TestHelloController</span> </span>{\n\n <span class=\"hljs-keyword\">private</span> MockMvc mockMvc;\n\n <span class=\"hljs-meta\">@BeforeEach</span>\n <span class=\"hljs-function\"><span class=\"hljs-keyword\">public</span> <span class=\"hljs-keyword\">void</span> <span class=\"hljs-title\">beforeEach</span><span class=\"hljs-params\">()</span></span>{\n mockMvc = MockMvcBuilders.standaloneSetup(<span class=\"hljs-keyword\">new</span> HelloController()).build();\n }\n <span class=\"hljs-meta\">@Test</span>\n <span class=\"hljs-function\"><span class=\"hljs-keyword\">public</span> <span class=\"hljs-keyword\">void</span> <span class=\"hljs-title\">testHello</span><span class=\"hljs-params\">()</span> <span class=\"hljs-keyword\">throws</span> Exception </span>{\n mockMvc.perform(MockMvcRequestBuilders.get(<span class=\"hljs-string\">\"/hello/boot\"</span>)\n .accept(MediaType.APPLICATION_JSON))\n .andExpect(status().isOk())\n .andExpect(content().string(equalTo(<span class=\"hljs-string\">\"hello spring boot\"</span>)));\n }\n}\n\n</code></div></pre>\n<p>上面的测试用例,是构建一个空的<code>WebApplicationContext</code>,并且在before中加载了HelloController,得以在测试用例中mock调用,模拟请求。</p>\n<h2><a id=\"24_jar_220\"></a>2.4 打包为jar运行</h2>\n<p><strong>第一步:</strong> 添加打包(maven构建springboot)插件</p>\n<pre><div class=\"hljs\"><code class=\"lang-xml\"> <span class=\"hljs-tag\"><<span class=\"hljs-name\">build</span>></span>\n <span class=\"hljs-tag\"><<span class=\"hljs-name\">plugins</span>></span>\n <span class=\"hljs-tag\"><<span class=\"hljs-name\">plugin</span>></span>\n <span class=\"hljs-tag\"><<span class=\"hljs-name\">groupId</span>></span>org.springframework.boot<span class=\"hljs-tag\"></<span class=\"hljs-name\">groupId</span>></span>\n <span class=\"hljs-tag\"><<span class=\"hljs-name\">artifactId</span>></span>spring-boot-maven-plugin<span class=\"hljs-tag\"></<span class=\"hljs-name\">artifactId</span>></span>\n <span class=\"hljs-tag\"></<span class=\"hljs-name\">plugin</span>></span>\n <span class=\"hljs-tag\"></<span class=\"hljs-name\">plugins</span>></span>\n <span class=\"hljs-tag\"></<span class=\"hljs-name\">build</span>></span>\n</code></div></pre>\n<p>在idea的右侧 maven中,使用package来打包程序,打包完成后,在target目录下生成helloSpringBoot-1.0-SNAPSHOT.jar</p>\n<p><img src=\"img/image-20210523181737720.png\" alt=\"image-20210523181737720\" /></p>\n<p>**第二步: ** 打开cmd:找到jar对应的目录</p>\n<p>输入命令</p>\n<pre><div class=\"hljs\"><code class=\"lang-shell\">java -jar helloSpringBoot-1.0-SNAPSHOT.jar\n</code></div></pre>\n<p><img src=\"img/image-20210523182426404.png\" alt=\"image-20210523182426404\" /></p>\n<p><strong>第三步:</strong> 测试,使用postman或者直接在浏览器输入http://localhost:8082/hello/boot</p>\n<p>得到结果:hello spring boot</p>\n<h2><a id=\"25_jar_253\"></a>2.5 查看jar包内容</h2>\n<pre><div class=\"hljs\"><code class=\"lang-shell\">jar tvf helloSpringBoot-1.0-SNAPSHOT.jar\n</code></div></pre>\n<h1><a id=\"3__259\"></a>3. 小结</h1>\n<ol>\n<li>通过Maven构建了一个空白Spring Boot项目,再通过引入web模块实现了一个简单的请求处理。</li>\n<li>通过修改配置文件,更改端口号</li>\n<li>编写了测试用例</li>\n<li>打包jar包运行</li>\n</ol>\n', 5);
INSERT INTO `ms_article_body` VALUES (6, '# 1. Spring Boot介绍\n\n## 1.1 简介\n\n在您第1次接触和学习Spring框架的时候,是否因为其繁杂的配置而退却了?\n\n在你第n次使用Spring框架的时候,是否觉得一堆反复黏贴的配置有一些厌烦?\n\n那么您就不妨来试试使用Spring Boot来让你更易上手,更简单快捷地构建Spring应用!\n\nSpring Boot让我们的Spring应用变的更轻量化。\n\n我们不必像以前那样繁琐的构建项目、打包应用、部署到Tomcat等应用服务器中来运行我们的业务服务。\n\n通过Spring Boot实现的服务,只需要依靠一个Java类,把它打包成jar,并通过`java -jar`命令就可以运行起来。\n\n这一切相较于传统Spring应用来说,已经变得非常的轻便、简单。\n\n**总结一下Spring Boot的主要优点:**\n\n1. 为所有Spring开发者更快的入门\n2. 开箱即用,提供各种默认配置来简化项目配置\n3. 内嵌式容器简化Web项目\n4. 没有冗余代码生成和XML配置的要求\n5. 统一的依赖管理\n6. 自动装配,更易使用,更易扩展\n\n## 1.2 使用版本说明\n\nSpringboot版本:使用最新的2.5.0版本\n\n教程参考了官方文档进行制作,权威。\n\n其他依赖版本:\n\n 1. Maven 需求:3.5+\n\n 2. JDK 需求 8+\n 3. Spring Framework 5.3.7以上版本\n 4. Tomcat 9.0\n 5. Servlet版本 4.0 但是可以部署到Servlet到3.1+的容器中\n\n# 2. 快速入门\n\n快速的创建一个Spring Boot应用,并且实现一个简单的Http请求处理。通过这个例子对Spring Boot有一个初步的了解,并体验其结构简单、开发快速的特性。\n\n教程使用的Idea版本:2019.3\n\n## 2.1 创建基础项目\n\n**第一步:** 创建maven项目\n\npom.xml :\n\n~~~xml\n<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project xmlns=\"http://maven.apache.org/POM/4.0.0\"\n xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n xsi:schemaLocation=\"http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd\">\n <modelVersion>4.0.0</modelVersion>\n\n <groupId>com.xiaopizhu</groupId>\n <artifactId>helloSpringBoot</artifactId>\n <version>1.0-SNAPSHOT</version>\n <!--springboot的父工程其中定义了常用的依赖,并且无依赖冲突-->\n <parent>\n <groupId>org.springframework.boot</groupId>\n <artifactId>spring-boot-starter-parent</artifactId>\n <version>2.5.0</version>\n </parent>\n</project>\n~~~\n\n注意上方的parent必须加,其中定义了springboot官方支持的n多依赖,基本上常用的已经有了,所以接下来导入依赖的时候,绝大部分都可以不加版本号。\n\n此时的工程结构为:\n\n![image20210523173241557.png](https://static.mszlu.com/a7302c88-e106-46ad-9713-dc9a6d523957.png)\n\n**第二步:** 添加web依赖\n\n~~~xml\n<dependencies>\n <dependency>\n <groupId>org.springframework.boot</groupId>\n <artifactId>spring-boot-starter-web</artifactId>\n </dependency>\n</dependencies>\n~~~\n\n添加上方的web依赖,其中间接依赖了spring-web,spring-webmvc,spring-core等spring和springmvc的包,并且集成了tomcat。\n\n**第三步:** 编写启动类\n\n~~~java\npackage com.xiaopizhu.springboot;\n\nimport org.springframework.boot.SpringApplication;\nimport org.springframework.boot.autoconfigure.SpringBootApplication;\n\n@SpringBootApplication\npublic class HelloApp {\n\n public static void main(String[] args) {\n SpringApplication.run(HelloApp.class,args);\n }\n}\n\n~~~\n\n@SpringBootApplication注解标识了HelloApp为启动类,也是Spring Boot的核心。\n\n**第四步:** 运行启动类的main方法\n\n![image20210523173712142.png](https://static.mszlu.com/dc17b43e-08df-46b0-bb7a-eb73044de7da.png)\n\n看到如上配置,证明启动成功,tomcat端口号默认为8080。\n\n**第五步:** 如果想要修改端口号,可以在resources目录下新建application.properties\n\n~~~properties\nserver.port=8082\n~~~\n\n**第六步:** 重新运行\n\n![image20210523174011613.png](https://static.mszlu.com/318e4b7e-95d2-4e43-a18f-279ea6ff9495.png)\n\n此时的项目结构为:\n\n![image20210523174032053.png](https://static.mszlu.com/756e4ae0-c4c7-43a5-9b5d-bc7ce974a942.png)\n\n**src/main/java :** 编写java代码,注意启动类需要放在项目的根包下。\n\n**src/main/resources:** 放置资源的目录,比如springboot的配置文件,静态文件,mybatis配置,日志配置等。\n\n**src/test/java:** 测试代码\n\n## 2.2 编写一个Http接口\n\n**第一步:** 创建`HelloController`类,内容如下:\n\n~~~java\npackage com.xiaopizhu.springboot.controller;\n\nimport org.springframework.web.bind.annotation.GetMapping;\nimport org.springframework.web.bind.annotation.RequestMapping;\nimport org.springframework.web.bind.annotation.RestController;\n\n@RestController\n@RequestMapping(\"hello\")\npublic class HelloController {\n\n @GetMapping(\"boot\")\n public String hello(){\n return \"hello spring boot\";\n }\n\n}\n\n~~~\n\n**注意包名,必须在启动类所在的包名下。**\n\n**第二步: ** 重启程序,使用postman或者直接在浏览器输入http://localhost:8082/hello/boot\n\n得到结果:hello spring boot\n\n## 2.3 编写单元测试用例\n\n**第一步: ** 添加spring boot测试依赖\n\n~~~xml\n <dependency>\n <groupId>org.springframework.boot</groupId>\n <artifactId>spring-boot-starter-test</artifactId>\n <scope>test</scope>\n </dependency>\n~~~\n\n**第二步:** 在src/test 下,编写测试用例\n\n~~~java\npackage com.xiaopizhu.springboot.controller;\n\nimport org.junit.jupiter.api.BeforeAll;\nimport org.junit.jupiter.api.BeforeEach;\nimport org.junit.jupiter.api.Test;\nimport org.springframework.boot.test.context.SpringBootTest;\nimport org.springframework.http.MediaType;\nimport org.springframework.test.web.servlet.MockMvc;\nimport org.springframework.test.web.servlet.request.MockMvcRequestBuilders;\nimport org.springframework.test.web.servlet.setup.MockMvcBuilders;\n\nimport static org.hamcrest.Matchers.equalTo;\nimport static org.springframework.test.web.servlet.result.MockMvcResultMatchers.content;\nimport static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;\n\n@SpringBootTest\npublic class TestHelloController {\n\n private MockMvc mockMvc;\n\n @BeforeEach\n public void beforeEach(){\n mockMvc = MockMvcBuilders.standaloneSetup(new HelloController()).build();\n }\n @Test\n public void testHello() throws Exception {\n mockMvc.perform(MockMvcRequestBuilders.get(\"/hello/boot\")\n .accept(MediaType.APPLICATION_JSON))\n .andExpect(status().isOk())\n .andExpect(content().string(equalTo(\"hello spring boot\")));\n }\n}\n\n~~~\n\n上面的测试用例,是构建一个空的`WebApplicationContext`,并且在before中加载了HelloController,得以在测试用例中mock调用,模拟请求。\n\n## 2.4 打包为jar运行\n\n**第一步:** 添加打包(maven构建springboot)插件\n\n~~~xml\n <build>\n <plugins>\n <plugin>\n <groupId>org.springframework.boot</groupId>\n <artifactId>spring-boot-maven-plugin</artifactId>\n </plugin>\n </plugins>\n </build>\n~~~\n\n在idea的右侧 maven中,使用package来打包程序,打包完成后,在target目录下生成helloSpringBoot-1.0-SNAPSHOT.jar\n\n![image20210523181737720.png](https://static.mszlu.com/45aa0db2-598f-4564-964c-a2d889dfbafe.png)\n\n**第二步: ** 打开cmd:找到jar对应的目录\n\n输入命令\n\n~~~shell\njava -jar helloSpringBoot-1.0-SNAPSHOT.jar\n~~~\n\n![image20210523182426404.png](https://static.mszlu.com/74376f77-b8eb-4c2c-a4cc-d3bfe24901e3.png)\n\n**第三步:** 测试,使用postman或者直接在浏览器输入http://localhost:8082/hello/boot\n\n得到结果:hello spring boot\n\n## 2.5 查看jar包内容\n\n~~~shell\njar tvf helloSpringBoot-1.0-SNAPSHOT.jar\n~~~\n\n# 3. 小结\n\n1. 通过Maven构建了一个空白Spring Boot项目,再通过引入web模块实现了一个简单的请求处理。\n2. 通过修改配置文件,更改端口号\n3. 编写了测试用例\n4. 打包jar包运行\n\n', '<h1><a id=\"1_Spring_Boot_0\"></a>1. Spring Boot介绍</h1>\n<h2><a id=\"11__2\"></a>1.1 简介</h2>\n<p>在您第1次接触和学习Spring框架的时候,是否因为其繁杂的配置而退却了?</p>\n<p>在你第n次使用Spring框架的时候,是否觉得一堆反复黏贴的配置有一些厌烦?</p>\n<p>那么您就不妨来试试使用Spring Boot来让你更易上手,更简单快捷地构建Spring应用!</p>\n<p>Spring Boot让我们的Spring应用变的更轻量化。</p>\n<p>我们不必像以前那样繁琐的构建项目、打包应用、部署到Tomcat等应用服务器中来运行我们的业务服务。</p>\n<p>通过Spring Boot实现的服务,只需要依靠一个Java类,把它打包成jar,并通过<code>java -jar</code>命令就可以运行起来。</p>\n<p>这一切相较于传统Spring应用来说,已经变得非常的轻便、简单。</p>\n<p><strong>总结一下Spring Boot的主要优点:</strong></p>\n<ol>\n<li>为所有Spring开发者更快的入门</li>\n<li>开箱即用,提供各种默认配置来简化项目配置</li>\n<li>内嵌式容器简化Web项目</li>\n<li>没有冗余代码生成和XML配置的要求</li>\n<li>统一的依赖管理</li>\n<li>自动装配,更易使用,更易扩展</li>\n</ol>\n<h2><a id=\"12__27\"></a>1.2 使用版本说明</h2>\n<p>Springboot版本:使用最新的2.5.0版本</p>\n<p>教程参考了官方文档进行制作,权威。</p>\n<p>其他依赖版本:</p>\n<pre><code>1. Maven 需求:3.5+\n\n2. JDK 需求 8+\n3. Spring Framework 5.3.7以上版本\n4. Tomcat 9.0\n5. Servlet版本 4.0 但是可以部署到Servlet到3.1+的容器中\n</code></pre>\n<h1><a id=\"2__42\"></a>2. 快速入门</h1>\n<p>快速的创建一个Spring Boot应用,并且实现一个简单的Http请求处理。通过这个例子对Spring Boot有一个初步的了解,并体验其结构简单、开发快速的特性。</p>\n<p>教程使用的Idea版本:2019.3</p>\n<h2><a id=\"21__48\"></a>2.1 创建基础项目</h2>\n<p><strong>第一步:</strong> 创建maven项目</p>\n<p>pom.xml :</p>\n<pre><div class=\"hljs\"><code class=\"lang-xml\"><span class=\"php\"><span class=\"hljs-meta\"><?</span>xml version=<span class=\"hljs-string\">\"1.0\"</span> encoding=<span class=\"hljs-string\">\"UTF-8\"</span><span class=\"hljs-meta\">?></span></span>\n<span class=\"hljs-tag\"><<span class=\"hljs-name\">project</span> <span class=\"hljs-attr\">xmlns</span>=<span class=\"hljs-string\">\"http://maven.apache.org/POM/4.0.0\"</span>\n <span class=\"hljs-attr\">xmlns:xsi</span>=<span class=\"hljs-string\">\"http://www.w3.org/2001/XMLSchema-instance\"</span>\n <span class=\"hljs-attr\">xsi:schemaLocation</span>=<span class=\"hljs-string\">\"http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd\"</span>></span>\n <span class=\"hljs-tag\"><<span class=\"hljs-name\">modelVersion</span>></span>4.0.0<span class=\"hljs-tag\"></<span class=\"hljs-name\">modelVersion</span>></span>\n\n <span class=\"hljs-tag\"><<span class=\"hljs-name\">groupId</span>></span>com.xiaopizhu<span class=\"hljs-tag\"></<span class=\"hljs-name\">groupId</span>></span>\n <span class=\"hljs-tag\"><<span class=\"hljs-name\">artifactId</span>></span>helloSpringBoot<span class=\"hljs-tag\"></<span class=\"hljs-name\">artifactId</span>></span>\n <span class=\"hljs-tag\"><<span class=\"hljs-name\">version</span>></span>1.0-SNAPSHOT<span class=\"hljs-tag\"></<span class=\"hljs-name\">version</span>></span>\n <span class=\"hljs-comment\"><!--springboot的父工程其中定义了常用的依赖,并且无依赖冲突--></span>\n <span class=\"hljs-tag\"><<span class=\"hljs-name\">parent</span>></span>\n <span class=\"hljs-tag\"><<span class=\"hljs-name\">groupId</span>></span>org.springframework.boot<span class=\"hljs-tag\"></<span class=\"hljs-name\">groupId</span>></span>\n <span class=\"hljs-tag\"><<span class=\"hljs-name\">artifactId</span>></span>spring-boot-starter-parent<span class=\"hljs-tag\"></<span class=\"hljs-name\">artifactId</span>></span>\n <span class=\"hljs-tag\"><<span class=\"hljs-name\">version</span>></span>2.5.0<span class=\"hljs-tag\"></<span class=\"hljs-name\">version</span>></span>\n <span class=\"hljs-tag\"></<span class=\"hljs-name\">parent</span>></span>\n<span class=\"hljs-tag\"></<span class=\"hljs-name\">project</span>></span>\n</code></div></pre>\n<p>注意上方的parent必须加,其中定义了springboot官方支持的n多依赖,基本上常用的已经有了,所以接下来导入依赖的时候,绝大部分都可以不加版本号。</p>\n<p>此时的工程结构为:</p>\n<p><img src=\"https://static.mszlu.com/a7302c88-e106-46ad-9713-dc9a6d523957.png\" alt=\"image20210523173241557.png\" /></p>\n<p><strong>第二步:</strong> 添加web依赖</p>\n<pre><div class=\"hljs\"><code class=\"lang-xml\"><span class=\"hljs-tag\"><<span class=\"hljs-name\">dependencies</span>></span>\n <span class=\"hljs-tag\"><<span class=\"hljs-name\">dependency</span>></span>\n <span class=\"hljs-tag\"><<span class=\"hljs-name\">groupId</span>></span>org.springframework.boot<span class=\"hljs-tag\"></<span class=\"hljs-name\">groupId</span>></span>\n <span class=\"hljs-tag\"><<span class=\"hljs-name\">artifactId</span>></span>spring-boot-starter-web<span class=\"hljs-tag\"></<span class=\"hljs-name\">artifactId</span>></span>\n <span class=\"hljs-tag\"></<span class=\"hljs-name\">dependency</span>></span>\n<span class=\"hljs-tag\"></<span class=\"hljs-name\">dependencies</span>></span>\n</code></div></pre>\n<p>添加上方的web依赖,其中间接依赖了spring-web,spring-webmvc,spring-core等spring和springmvc的包,并且集成了tomcat。</p>\n<p><strong>第三步:</strong> 编写启动类</p>\n<pre><div class=\"hljs\"><code class=\"lang-java\"><span class=\"hljs-keyword\">package</span> com.xiaopizhu.springboot;\n\n<span class=\"hljs-keyword\">import</span> org.springframework.boot.SpringApplication;\n<span class=\"hljs-keyword\">import</span> org.springframework.boot.autoconfigure.SpringBootApplication;\n\n<span class=\"hljs-meta\">@SpringBootApplication</span>\n<span class=\"hljs-keyword\">public</span> <span class=\"hljs-class\"><span class=\"hljs-keyword\">class</span> <span class=\"hljs-title\">HelloApp</span> </span>{\n\n <span class=\"hljs-function\"><span class=\"hljs-keyword\">public</span> <span class=\"hljs-keyword\">static</span> <span class=\"hljs-keyword\">void</span> <span class=\"hljs-title\">main</span><span class=\"hljs-params\">(String[] args)</span> </span>{\n SpringApplication.run(HelloApp.class,args);\n }\n}\n\n</code></div></pre>\n<p>@SpringBootApplication注解标识了HelloApp为启动类,也是Spring Boot的核心。</p>\n<p><strong>第四步:</strong> 运行启动类的main方法</p>\n<p><img src=\"https://static.mszlu.com/dc17b43e-08df-46b0-bb7a-eb73044de7da.png\" alt=\"image20210523173712142.png\" /></p>\n<p>看到如上配置,证明启动成功,tomcat端口号默认为8080。</p>\n<p><strong>第五步:</strong> 如果想要修改端口号,可以在resources目录下新建application.properties</p>\n<pre><code class=\"lang-properties\">server.port=8082\n</code></pre>\n<p><strong>第六步:</strong> 重新运行</p>\n<p><img src=\"https://static.mszlu.com/318e4b7e-95d2-4e43-a18f-279ea6ff9495.png\" alt=\"image20210523174011613.png\" /></p>\n<p>此时的项目结构为:</p>\n<p><img src=\"https://static.mszlu.com/756e4ae0-c4c7-43a5-9b5d-bc7ce974a942.png\" alt=\"image20210523174032053.png\" /></p>\n<p><strong>src/main/java :</strong> 编写java代码,注意启动类需要放在项目的根包下。</p>\n<p><strong>src/main/resources:</strong> 放置资源的目录,比如springboot的配置文件,静态文件,mybatis配置,日志配置等。</p>\n<p><strong>src/test/java:</strong> 测试代码</p>\n<h2><a id=\"22_Http_138\"></a>2.2 编写一个Http接口</h2>\n<p><strong>第一步:</strong> 创建<code>HelloController</code>类,内容如下:</p>\n<pre><div class=\"hljs\"><code class=\"lang-java\"><span class=\"hljs-keyword\">package</span> com.xiaopizhu.springboot.controller;\n\n<span class=\"hljs-keyword\">import</span> org.springframework.web.bind.annotation.GetMapping;\n<span class=\"hljs-keyword\">import</span> org.springframework.web.bind.annotation.RequestMapping;\n<span class=\"hljs-keyword\">import</span> org.springframework.web.bind.annotation.RestController;\n\n<span class=\"hljs-meta\">@RestController</span>\n<span class=\"hljs-meta\">@RequestMapping</span>(<span class=\"hljs-string\">\"hello\"</span>)\n<span class=\"hljs-keyword\">public</span> <span class=\"hljs-class\"><span class=\"hljs-keyword\">class</span> <span class=\"hljs-title\">HelloController</span> </span>{\n\n <span class=\"hljs-meta\">@GetMapping</span>(<span class=\"hljs-string\">\"boot\"</span>)\n <span class=\"hljs-function\"><span class=\"hljs-keyword\">public</span> String <span class=\"hljs-title\">hello</span><span class=\"hljs-params\">()</span></span>{\n <span class=\"hljs-keyword\">return</span> <span class=\"hljs-string\">\"hello spring boot\"</span>;\n }\n\n}\n\n</code></div></pre>\n<p><strong>注意包名,必须在启动类所在的包名下。</strong></p>\n<p>**第二步: ** 重启程序,使用postman或者直接在浏览器输入http://localhost:8082/hello/boot</p>\n<p>得到结果:hello spring boot</p>\n<h2><a id=\"23__168\"></a>2.3 编写单元测试用例</h2>\n<p>**第一步: ** 添加spring boot测试依赖</p>\n<pre><div class=\"hljs\"><code class=\"lang-xml\"> <span class=\"hljs-tag\"><<span class=\"hljs-name\">dependency</span>></span>\n <span class=\"hljs-tag\"><<span class=\"hljs-name\">groupId</span>></span>org.springframework.boot<span class=\"hljs-tag\"></<span class=\"hljs-name\">groupId</span>></span>\n <span class=\"hljs-tag\"><<span class=\"hljs-name\">artifactId</span>></span>spring-boot-starter-test<span class=\"hljs-tag\"></<span class=\"hljs-name\">artifactId</span>></span>\n <span class=\"hljs-tag\"><<span class=\"hljs-name\">scope</span>></span>test<span class=\"hljs-tag\"></<span class=\"hljs-name\">scope</span>></span>\n <span class=\"hljs-tag\"></<span class=\"hljs-name\">dependency</span>></span>\n</code></div></pre>\n<p><strong>第二步:</strong> 在src/test 下,编写测试用例</p>\n<pre><div class=\"hljs\"><code class=\"lang-java\"><span class=\"hljs-keyword\">package</span> com.xiaopizhu.springboot.controller;\n\n<span class=\"hljs-keyword\">import</span> org.junit.jupiter.api.BeforeAll;\n<span class=\"hljs-keyword\">import</span> org.junit.jupiter.api.BeforeEach;\n<span class=\"hljs-keyword\">import</span> org.junit.jupiter.api.Test;\n<span class=\"hljs-keyword\">import</span> org.springframework.boot.test.context.SpringBootTest;\n<span class=\"hljs-keyword\">import</span> org.springframework.http.MediaType;\n<span class=\"hljs-keyword\">import</span> org.springframework.test.web.servlet.MockMvc;\n<span class=\"hljs-keyword\">import</span> org.springframework.test.web.servlet.request.MockMvcRequestBuilders;\n<span class=\"hljs-keyword\">import</span> org.springframework.test.web.servlet.setup.MockMvcBuilders;\n\n<span class=\"hljs-keyword\">import</span> <span class=\"hljs-keyword\">static</span> org.hamcrest.Matchers.equalTo;\n<span class=\"hljs-keyword\">import</span> <span class=\"hljs-keyword\">static</span> org.springframework.test.web.servlet.result.MockMvcResultMatchers.content;\n<span class=\"hljs-keyword\">import</span> <span class=\"hljs-keyword\">static</span> org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;\n\n<span class=\"hljs-meta\">@SpringBootTest</span>\n<span class=\"hljs-keyword\">public</span> <span class=\"hljs-class\"><span class=\"hljs-keyword\">class</span> <span class=\"hljs-title\">TestHelloController</span> </span>{\n\n <span class=\"hljs-keyword\">private</span> MockMvc mockMvc;\n\n <span class=\"hljs-meta\">@BeforeEach</span>\n <span class=\"hljs-function\"><span class=\"hljs-keyword\">public</span> <span class=\"hljs-keyword\">void</span> <span class=\"hljs-title\">beforeEach</span><span class=\"hljs-params\">()</span></span>{\n mockMvc = MockMvcBuilders.standaloneSetup(<span class=\"hljs-keyword\">new</span> HelloController()).build();\n }\n <span class=\"hljs-meta\">@Test</span>\n <span class=\"hljs-function\"><span class=\"hljs-keyword\">public</span> <span class=\"hljs-keyword\">void</span> <span class=\"hljs-title\">testHello</span><span class=\"hljs-params\">()</span> <span class=\"hljs-keyword\">throws</span> Exception </span>{\n mockMvc.perform(MockMvcRequestBuilders.get(<span class=\"hljs-string\">\"/hello/boot\"</span>)\n .accept(MediaType.APPLICATION_JSON))\n .andExpect(status().isOk())\n .andExpect(content().string(equalTo(<span class=\"hljs-string\">\"hello spring boot\"</span>)));\n }\n}\n\n</code></div></pre>\n<p>上面的测试用例,是构建一个空的<code>WebApplicationContext</code>,并且在before中加载了HelloController,得以在测试用例中mock调用,模拟请求。</p>\n<h2><a id=\"24_jar_220\"></a>2.4 打包为jar运行</h2>\n<p><strong>第一步:</strong> 添加打包(maven构建springboot)插件</p>\n<pre><div class=\"hljs\"><code class=\"lang-xml\"> <span class=\"hljs-tag\"><<span class=\"hljs-name\">build</span>></span>\n <span class=\"hljs-tag\"><<span class=\"hljs-name\">plugins</span>></span>\n <span class=\"hljs-tag\"><<span class=\"hljs-name\">plugin</span>></span>\n <span class=\"hljs-tag\"><<span class=\"hljs-name\">groupId</span>></span>org.springframework.boot<span class=\"hljs-tag\"></<span class=\"hljs-name\">groupId</span>></span>\n <span class=\"hljs-tag\"><<span class=\"hljs-name\">artifactId</span>></span>spring-boot-maven-plugin<span class=\"hljs-tag\"></<span class=\"hljs-name\">artifactId</span>></span>\n <span class=\"hljs-tag\"></<span class=\"hljs-name\">plugin</span>></span>\n <span class=\"hljs-tag\"></<span class=\"hljs-name\">plugins</span>></span>\n <span class=\"hljs-tag\"></<span class=\"hljs-name\">build</span>></span>\n</code></div></pre>\n<p>在idea的右侧 maven中,使用package来打包程序,打包完成后,在target目录下生成helloSpringBoot-1.0-SNAPSHOT.jar</p>\n<p><img src=\"https://static.mszlu.com/45aa0db2-598f-4564-964c-a2d889dfbafe.png\" alt=\"image20210523181737720.png\" /></p>\n<p>**第二步: ** 打开cmd:找到jar对应的目录</p>\n<p>输入命令</p>\n<pre><div class=\"hljs\"><code class=\"lang-shell\">java -jar helloSpringBoot-1.0-SNAPSHOT.jar\n</code></div></pre>\n<p><img src=\"https://static.mszlu.com/74376f77-b8eb-4c2c-a4cc-d3bfe24901e3.png\" alt=\"image20210523182426404.png\" /></p>\n<p><strong>第三步:</strong> 测试,使用postman或者直接在浏览器输入http://localhost:8082/hello/boot</p>\n<p>得到结果:hello spring boot</p>\n<h2><a id=\"25_jar_253\"></a>2.5 查看jar包内容</h2>\n<pre><div class=\"hljs\"><code class=\"lang-shell\">jar tvf helloSpringBoot-1.0-SNAPSHOT.jar\n</code></div></pre>\n<h1><a id=\"3__259\"></a>3. 小结</h1>\n<ol>\n<li>通过Maven构建了一个空白Spring Boot项目,再通过引入web模块实现了一个简单的请求处理。</li>\n<li>通过修改配置文件,更改端口号</li>\n<li>编写了测试用例</li>\n<li>打包jar包运行</li>\n</ol>\n', 6);
INSERT INTO `ms_article_body` VALUES (7, '1234', '<p>1234</p>\n', 7);
INSERT INTO `ms_article_body` VALUES (8, '222', '<p>222</p>\n', 8);
INSERT INTO `ms_article_body` VALUES (12, '2333![email.png](http://localhost:8888/d26f21b8-5231-4f55-9604-8c78f56fd707.png)', '<p>2333<img src=\"http://localhost:8888/d26f21b8-5231-4f55-9604-8c78f56fd707.png\" alt=\"email.png\" /></p>\n', 12);
INSERT INTO `ms_article_body` VALUES (13, '777![论坛.png](http://localhost:8888/13c8a1b6-cab1-4af2-ab28-069622bcb7c5.png)', '<p>777<img src=\"http://localhost:8888/13c8a1b6-cab1-4af2-ab28-069622bcb7c5.png\" alt=\"论坛.png\" /></p>\n', 13);
INSERT INTO `ms_article_body` VALUES (14, '66667777![查找.png](http://localhost:8888/8416d212-7629-4d7b-b517-6ab8d3e16f13.png)', '<p>66667777<img src=\"http://localhost:8888/8416d212-7629-4d7b-b517-6ab8d3e16f13.png\" alt=\"查找.png\" /></p>\n', 14);
-- ----------------------------
-- Table structure for ms_article_tag
-- ----------------------------
DROP TABLE IF EXISTS `ms_article_tag`;
CREATE TABLE `ms_article_tag` (
`id` bigint(0) NOT NULL AUTO_INCREMENT,
`article_id` bigint(0) NOT NULL,
`tag_id` bigint(0) NOT NULL,
PRIMARY KEY (`id`) USING BTREE,
INDEX `article_id`(`article_id`) USING BTREE,
INDEX `tag_id`(`tag_id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 1405916999787233282 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of ms_article_tag
-- ----------------------------
INSERT INTO `ms_article_tag` VALUES (1, 1, 7);
INSERT INTO `ms_article_tag` VALUES (2, 1, 5);
INSERT INTO `ms_article_tag` VALUES (3, 1, 8);
INSERT INTO `ms_article_tag` VALUES (4, 9, 7);
INSERT INTO `ms_article_tag` VALUES (5, 10, 7);
INSERT INTO `ms_article_tag` VALUES (6, 10, 8);
INSERT INTO `ms_article_tag` VALUES (7, 10, 5);
INSERT INTO `ms_article_tag` VALUES (8, 10, 6);
INSERT INTO `ms_article_tag` VALUES (9, 9, 8);
INSERT INTO `ms_article_tag` VALUES (10, 10, 7);
INSERT INTO `ms_article_tag` VALUES (11, 10, 8);
INSERT INTO `ms_article_tag` VALUES (12, 11, 5);
INSERT INTO `ms_article_tag` VALUES (13, 11, 6);
INSERT INTO `ms_article_tag` VALUES (14, 11, 7);
INSERT INTO `ms_article_tag` VALUES (15, 11, 8);
INSERT INTO `ms_article_tag` VALUES (16, 12, 8);
INSERT INTO `ms_article_tag` VALUES (17, 13, 8);
INSERT INTO `ms_article_tag` VALUES (18, 14, 8);
-- ----------------------------
-- Table structure for ms_category
-- ----------------------------
DROP TABLE IF EXISTS `ms_category`;
CREATE TABLE `ms_category` (
`id` bigint(0) NOT NULL AUTO_INCREMENT,
`avatar` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL,
`category_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL,
`description` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL,
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 6 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of ms_category
-- ----------------------------
INSERT INTO `ms_category` VALUES (1, '/static/category/front.png', '前端', '前端是什么,大前端');
INSERT INTO `ms_category` VALUES (2, '/static/category/back.png', '后端', '后端最牛叉');
INSERT INTO `ms_category` VALUES (3, '/static/category/lift.jpg', '生活', '生活趣事');
INSERT INTO `ms_category` VALUES (4, '/static/category/database.png', '数据库', '没数据库,啥也不管用');
INSERT INTO `ms_category` VALUES (5, '/static/category/language.png', '编程语言', '好多语言,该学哪个?');
-- ----------------------------
-- Table structure for ms_comment
-- ----------------------------
DROP TABLE IF EXISTS `ms_comment`;
CREATE TABLE `ms_comment` (
`id` bigint(0) NOT NULL AUTO_INCREMENT,
`content` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL,
`create_date` bigint(0) NOT NULL,
`article_id` int(0) NOT NULL,
`author_id` bigint(0) NOT NULL,
`parent_id` bigint(0) NOT NULL,
`to_uid` bigint(0) NOT NULL,
`level` varchar(1) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
PRIMARY KEY (`id`) USING BTREE,
INDEX `article_id`(`article_id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 1405209691876790275 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of ms_comment
-- ----------------------------
INSERT INTO `ms_comment` VALUES (1, '2333', 1627009488651, 12, 3, 0, 0, '1');
INSERT INTO `ms_comment` VALUES (2, '2333', 1627009492776, 12, 3, 1, 3, '2');
INSERT INTO `ms_comment` VALUES (3, '666', 1627010764363, 2, 4, 0, 0, '1');
INSERT INTO `ms_comment` VALUES (4, '666', 1627010772513, 2, 4, 3, 4, '2');
INSERT INTO `ms_comment` VALUES (5, '777', 1627010912690, 2, 4, 3, 4, '2');
-- ----------------------------
-- Table structure for ms_permission
-- ----------------------------
DROP TABLE IF EXISTS `ms_permission`;
CREATE TABLE `ms_permission` (
`id` bigint(0) NOT NULL AUTO_INCREMENT,
`name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL,
`path` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL,
`description` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL,
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 9 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of ms_permission
-- ----------------------------
INSERT INTO `ms_permission` VALUES (1, '查询权限列表', '/admin/permission/permissionList', '查询权限列表');
INSERT INTO `ms_permission` VALUES (2, '11', '11', '111');
INSERT INTO `ms_permission` VALUES (7, '1213', '123', '123');
INSERT INTO `ms_permission` VALUES (8, '删除权限', '/admin/permission/add', '删除权限');
-- ----------------------------
-- Table structure for ms_sys_log
-- ----------------------------
DROP TABLE IF EXISTS `ms_sys_log`;
CREATE TABLE `ms_sys_log` (
`id` bigint(0) NOT NULL AUTO_INCREMENT,
`create_date` bigint(0) NULL DEFAULT NULL,
`ip` varchar(15) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL,
`method` varchar(100) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL,
`module` varchar(10) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL,
`nickname` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL,
`operation` varchar(25) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL,
`params` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL,
`time` bigint(0) NULL DEFAULT NULL,
`userid` bigint(0) NULL DEFAULT NULL,
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8 COLLATE = utf8_unicode_ci ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of ms_sys_log
-- ----------------------------
-- ----------------------------
-- Table structure for ms_sys_user
-- ----------------------------
DROP TABLE IF EXISTS `ms_sys_user`;
CREATE TABLE `ms_sys_user` (
`id` bigint(0) NOT NULL AUTO_INCREMENT,
`account` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '账号',
`admin` bit(1) NULL DEFAULT NULL COMMENT '是否管理员',
`avatar` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '头像',
`create_date` bigint(0) NULL DEFAULT NULL COMMENT '注册时间',
`deleted` bit(1) NULL DEFAULT NULL COMMENT '是否删除',
`email` varchar(128) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '邮箱',
`last_login` bigint(0) NULL DEFAULT NULL COMMENT '最后登录时间',
`mobile_phone_number` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '手机号',
`nickname` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '昵称',
`password` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '密码',
`salt` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '加密盐',
`status` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '状态',
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 1418028562630115331 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of ms_sys_user
-- ----------------------------
INSERT INTO `ms_sys_user` VALUES (1, 'admin', b'1', '/static/user/admin.png', 20210622223122, b'0', '11', 20210630223130, '12', 'admin', '5a1760628ea739e61d9bb798b50542d5', '12', '1');
INSERT INTO `ms_sys_user` VALUES (2, '12345', b'1', '/static/user/user_1.png', 1626919329680, b'0', '', 1626919329680, NULL, '12345', '5a1760628ea739e61d9bb798b50542d5', '', '');
INSERT INTO `ms_sys_user` VALUES (3, '2333', b'1', '/static/user/user_1.png', 1627009468130, b'0', '', 1627009468130, NULL, '2333', 'a5fc070cc9fffa24dcf56e8845cfbc53', '', '');
INSERT INTO `ms_sys_user` VALUES (4, '8888', b'1', '/static/user/user_1.png', 1627010757407, b'0', '', 1627010757407, NULL, '8888', '96174bf25f727531ce48b8e319da90c4', '', '');
-- ----------------------------
-- Table structure for ms_tag
-- ----------------------------
DROP TABLE IF EXISTS `ms_tag`;
CREATE TABLE `ms_tag` (
`id` bigint(0) NOT NULL AUTO_INCREMENT,
`avatar` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL,
`tag_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL,
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 11 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of ms_tag
-- ----------------------------
INSERT INTO `ms_tag` VALUES (5, '/static/tag/java.png', 'springboot');
INSERT INTO `ms_tag` VALUES (6, '/static/tag/java.png', 'spring');
INSERT INTO `ms_tag` VALUES (7, '/static/tag/java.png', 'springmvc');
INSERT INTO `ms_tag` VALUES (8, '/static/tag/css.png', '11');
SET FOREIGN_KEY_CHECKS = 1;