- 一、Hello World跑起来
- 1、新建Contrller
- 2、编写控制器
- 3、运行
- 4、查看结果
- 二、最简单的数据库查询
- 1、数据库搭建
- 2、实体对象
- 3、Mapper
- 创建mapper文件
- 引入依赖
- 编写mapper文件
- 4、驱动配置
- 5、前端页面
- 添加页面
- 引入依赖
- 编写页面
- 6、控制器
- 7、运行
一、Hello World跑起来接上文
SpringBoot项目创建
- 项目初始结构:
- 在com.example.demo软件包下新建软件包Controller
- 创建成功之后,在Controller下新建Java类,命名为HelloWorldController
- 编写第一个控制器
package com.example.demo.Controller;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.RequestMapping;
@RestController //因为此时还没有前端视图页面(没有HTML),所以只有返回一个Json对象给浏览器显示Hello World
public class HelloWorldController {
//响应请求,有9大请求GET、POST、HEAD、OPTIONS、PUT、PATCH、DELETe、TRACE、CONNECT,常用的是GET和POST
//Spring Boot当中将GET请求映射到控制器处理方法上使用@GetMapping,将POST请求映射到控制器处理方法上使用@PostMapping
//@RequestMapping用于将任意HTTP请求映射到控制器方法上。
// @RequestMapping表示共享映射,如果没有指定请求方式,将接收GET、POST、HEAD、OPTIONS、PUT、PATCH、DELETE、TRACE、CONNECT所有的HTTP请求方式。
@RequestMapping("/")
public String HelloWorld() {
return "Hello World"; //返回Hello World
}
}
3、运行
- 点击右上角运行
- 控制台输出
-
打开浏览器输入127.0.0.1:8080或者localhost:8080
-
显示Hello World证明成功
数据库MySQL 8.0
MySQL5版本可能会出错,可以百度解决
工具Navicat
新建数据库Vocabulary
在Vocabulary数据库下新建表Vocabulary
SQL文件
SET NAMES utf8mb4; SET FOREIGN_KEY_CHECKS = 0; -- ---------------------------- -- Table structure for vocabulary -- ---------------------------- DROP TABLE IF EXISTS `vocabulary`; CREATE TABLE `vocabulary` ( `id` int NULL DEFAULT NULL, `word` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL, `definition` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL ) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic; -- ---------------------------- -- Records of vocabulary -- ---------------------------- INSERT INTO `vocabulary` VALUES (1, 'optimum', 'adj. 最适宜的 n. 最佳条件'); INSERT INTO `vocabulary` VALUES (2, 'rational', 'adj. 理性的,合理的,神智清楚的'); INSERT INTO `vocabulary` VALUES (3, 'sensible', 'adj. 明智的,实用的,意识到的'); INSERT INTO `vocabulary` VALUES (4, 'sensitive', 'adj. 敏感的,易恼怒的,善解人意的,细腻的,微妙的,机密的'); INSERT INTO `vocabulary` VALUES (5, 'acknowledge', 'vt. 承认,认可,感谢,告知收悉,向…致意'); INSERT INTO `vocabulary` VALUES (6, 'cherish', 'vt. 珍爱,爱护,怀有,珍视'); INSERT INTO `vocabulary` VALUES (7, 'boast', 'vi. 自夸 vt. 自豪地拥有 n. 夸耀'); INSERT INTO `vocabulary` VALUES (8, 'boost', 'n. 促进,增长,宣传 vt. 增加,宣传,放大,升高,推送'); INSERT INTO `vocabulary` VALUES (9, 'verdict', 'n. 裁决,结论'); INSERT INTO `vocabulary` VALUES (10, 'vessel', 'n. 船,容器,脉管,导管'); INSERT INTO `vocabulary` VALUES (11, 'vice', 'n. 有伤风化的行为,恶习,缺陷 n. 台钳'); INSERT INTO `vocabulary` VALUES (12, 'vicious', 'adj. 凶狠的,恶毒的,凶猛危险的,剧烈的'); INSERT INTO `vocabulary` VALUES (13, 'formidable', 'adj. 难克服的'); INSERT INTO `vocabulary` VALUES (14, 'formulate', 'vt. 构想,确切地表达'); INSERT INTO `vocabulary` VALUES (15, 'soak', 'vt. 打湿,浸泡,向…敲竹杠 vi. 渗入,浸泡,狂饮 reflexive verb. 湿透,浸泡在…中 n. 浸泡,酒鬼 combining form. 被…浸透的 vi. 渗完 vi. 渗入 vt. 把…泡掉 vi. 被泡掉 vt. 把…泡掉 vi. 被泡掉 vi. 渗透 vt. 使湿透 vt. 吸掉'); INSERT INTO `vocabulary` VALUES (16, 'soar', 'vi. 高飞,升高,高涨,猛增 vi. 飞上天空'); INSERT INTO `vocabulary` VALUES (17, 'detach', 'vt. 使…分开 reflexive verb. 挣脱'); INSERT INTO `vocabulary` VALUES (18, 'detain', 'vt. 耽搁,拘留,留…住院治疗'); INSERT INTO `vocabulary` VALUES (19, 'sound', 'n. 声响,音质,声音,(乐)音,音乐风格,印象,听力范围,海峡 vt. 吹响,发出…的信号,表示,发,对…听诊,测…的深度 vi. 响起,听起来 vi. 高谈阔论某事物 vt. 试探,打探 adj. 健康的,合理的,稳固的,实实在在的,可靠的,彻底的,酣畅的,合法的 adverb. 酣畅地'); INSERT INTO `vocabulary` VALUES (20, 'advisable', 'adj. 可取的'); INSERT INTO `vocabulary` VALUES (21, 'affection', 'n. 喜爱,爱情'); INSERT INTO `vocabulary` VALUES (22, 'affiliate', 'vt. 使隶属 vi. 并入 n. 附属机构'); INSERT INTO `vocabulary` VALUES (23, 'affirm', 'vt. 断言,申明'); INSERT INTO `vocabulary` VALUES (24, 'breach', 'n. 违反,破裂,缺口 vt. 违反,在…上打开缺口'); INSERT INTO `vocabulary` VALUES (25, 'collapse', 'vi. 倒塌,晕倒,累得倒下,垮掉,暴跌,萎陷,折叠起来 vt. 折叠,合并 n. 倒塌,病倒,崩溃,暴跌,萎陷'); INSERT INTO `vocabulary` VALUES (26, 'collide', 'vi. 碰撞,冲突'); INSERT INTO `vocabulary` VALUES (27, 'command', 'n. 命令,控制权,控制,掌握,指令,所辖部队,防区 vt. 命令采取,指挥,拥有,赢得,对…呈控制之势 vi. 命令,当指挥官'); INSERT INTO `vocabulary` VALUES (28, 'comment', 'n. 评论,注解,批评,意见 vt. 评论 vi. 评论,作评注'); INSERT INTO `vocabulary` VALUES (29, 'commend', 'vt. 称赞,推荐,委托 reflexive verb. 受到某人的欣赏'); INSERT INTO `vocabulary` VALUES (30, 'commodity', 'n. 商品,有用的东西,可贵品质'); INSERT INTO `vocabulary` VALUES (31, 'detect', 'vt. 查明,闻到'); INSERT INTO `vocabulary` VALUES (32, 'deteriorate', 'vi. 恶化'); INSERT INTO `vocabulary` VALUES (33, 'entail', 'vt. 须要,限嗣继承,合乎逻辑地引出'); INSERT INTO `vocabulary` VALUES (34, 'plausible', 'adj. 貌似合理的,花言巧语的'); INSERT INTO `vocabulary` VALUES (35, 'aggravate', 'vt. 使恶化,惹恼'); INSERT INTO `vocabulary` VALUES (36, 'aggregate', 'n. 总数,聚合体,集料 adj. 总的 vt. 合计'); INSERT INTO `vocabulary` VALUES (37, 'agreeable', 'adj. 亲切友善的,宜人的,欣然同意某事物/做某事,可接受的'); INSERT INTO `vocabulary` VALUES (38, 'alter', 'vi. 改变 vt. 改变'); INSERT INTO `vocabulary` VALUES (39, 'alternate', 'adj. 交替的,间隔的 vi. 轮流,交流 vt. 使交替'); INSERT INTO `vocabulary` VALUES (40, 'alternative', 'adj. 可供替代的,非传统的 n. 选择,可能的选择'); INSERT INTO `vocabulary` VALUES (41, 'comparable', 'adj. 比得上的,相似的'); INSERT INTO `vocabulary` VALUES (42, 'comparison', 'n. 比较,对比,类似,类比,比较'); INSERT INTO `vocabulary` VALUES (43, 'compensate', 'vt. 赔偿 vi. 补偿'); INSERT INTO `vocabulary` VALUES (44, 'competent', 'adj. 有能力的,足够的,有决定权的'); INSERT INTO `vocabulary` VALUES (45, 'complain', 'vi. 抱怨 vt. 抱怨'); INSERT INTO `vocabulary` VALUES (46, 'complaint', 'n. 抱怨,疾病'); INSERT INTO `vocabulary` VALUES (47, 'complicate', 'vt. 使复杂化'); INSERT INTO `vocabulary` VALUES (48, 'complicated', 'adj. 复杂的,难懂的'); INSERT INTO `vocabulary` VALUES (49, 'comply', 'vi. 服从,遵守'); INSERT INTO `vocabulary` VALUES (50, 'compliment', 'n. 赞扬,致意 pl. 称赞之词,问候 vt. 称赞'); SET FOREIGN_KEY_CHECKS = 1;2、实体对象
实体对象我的理解就是数据模型,对应数据库当中的一个表,在项目当中对数据库的操作相当于对这个实体对象进行操作,符合面向对象的万物皆对象原则
- 新建实体对象
- 在com.example.demo下新建软件包Entity存储实体对象类
- 新建实体对象Vocabulary,和数据库表名相同
- 编写Vocabulary实体
package com.example.demo.Entity;
import lombok.Data;
@Data //Lombok @Data注解,自动提供类所有属性的getter和setter方法,同时还提供equals,hashCode,toString等方法,极大减少代码量。
public class Vocabulary {
//类成员和数据库表中项名相对应
private int id;
private String word;
private String definition;
}
3、Mapper
创建mapper文件Mapper层或者称为DAO层,是一个接口,我的理解就是用来对数据库进行数据操作,他的方法语句是直接针对数据库的
- 在com.example.demo下新建软件包Mapper
- 新建接口VocabularyMapper
常用的ORM框架是Mybatis,这里我们使用国内的Mybatis-Plus,它是对Mybatis进行了增强,可以简化我们一些开发
官网:Mybatis-Plus
- 首先我们引入Mybatis-Plus的依赖,打开pom.xml文件,找到
在里面添
当前最新版本是3.5.1,可以根据需要更换最新版本
com.baomidou mybatis-plus-boot-starter 3.5.1
添加完成之后,目前完整的依赖是
org.springframework.boot spring-boot-starter-web mysql mysql-connector-java runtime org.projectlombok lombok true org.springframework.boot spring-boot-starter-test test com.baomidou mybatis-plus-boot-starter 3.5.1
添加完成之后需要 加载Maven变更
右上角点击刷新
因为主要涉及到的都是简单的增删改查操作,还没有涉及到复杂的SQL语句,所以我们可以使用Mybatis-Plus已经封装好的基类BaseMapper<>,我们只需要将我们自己的VocabularyMapper去继承BaseMapper<>,泛型是之前定义的Vocabulary。
package com.example.demo.Mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.example.demo.Entity.Vocabulary; @Mapper public interface VocabularyMapper extends BaseMapper{ }
这样,VovcabularyMapper接口当中就具备了我们所需要的增删查改的基本方法。
在这里我们还需要在启动类DemoApplication中添加MapperScan注解指向Mapper软件包,不然会报找不到bean
package com.example.demo;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
@MapperScan("com.example.demo.Mapper") //这里添加
public class DemoApplication {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
}
4、驱动配置
因为增删查改都是自动完成的,所以我们还需要配置MySQL的驱动,让项目知道我们的MySQL
打开springboot的配置文件application.properties
我们会发现什么都没有,因为SpringBoot是约定大于配置的,这节省了很多配置的时间,并且如果有自己个性的配置,也可以自己在配置文件当中进行配置
#指明MySQL数据库的驱动 #MySQL8.0以下是com.mysql.jdbc.Driver #MySQL8.0是com.mysql.cj.jdbc.Driver spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver #MySQL数据库地址 #这里指明了数据库是vocabulary数据库 #后面?serverTimezone=UTC&useUnicode=true&characterEncoding=utf8是参数,指定了时区(UTC)和编码(UTF-8) spring.datasource.url=jdbc:mysql://localhost:3306/vocabulary?serverTimezone=UTC&useUnicode=true&characterEncoding=utf8 #MySQL用户名 spring.datasource.username= #MySQL密码 spring.datasource.password= #可以指定启动端口 #server.port=805、前端页面
添加页面这里使用SpringBoot推荐使用的前端框架 Thymeleaf
官网: Thymeleaf
在resources/templates文件夹下添加list.html文件
在pom.xml文件中添加依赖
org.springframework.boot
spring-boot-starter-thymeleaf
然后刷新 加载Maven变更
编写页面- 初始页面是这样的
Title
这里就不过多叙述HTML CSS等语法了,关于Thymeleaf的语法以后有时间再叙述,或者可以自学官网文档
- 完整的HTML页面是这样的
list
id
word
definition
id
word
definition
6、控制器
控制器我的理解就是后台,处理前端过来的数据和请求,然后返回给前端他需要的东西
- 在Controller下新建控制器类VocabularyController
package com.example.demo.Controller;
import com.example.demo.Entity.Vocabulary;
import com.example.demo.Mapper.VocabularyMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.RequestMapping;
import java.util.List;
@Controller //@Controller注解,表示这是一个控制器
public class VocabularyController {
@Autowired
VocabularyMapper vocabularyMapper;
@RequestMapping("/list")
public String showList(ModelMap modelMap) { //ModelMap对象主要用于传递控制方法传递数据到结果页面。
List vocabularyList = vocabularyMapper.selectList(null); //调用selectList方法直接查询所有的数据库数据,相当于SELECT * FROM TABLE
modelMap.addAttribute("vocabulary",vocabularyList); //将查询结果传送到前端视图页面
return "list"; //返回前端视图list
}
}
7、运行
点击运行,访问http://localhost:8080/list或者http://127.0.0.1:8080/list
成功显示



