文档说明
- 开发环境是idea开发工具、jdk8还有maven3.5.4
- 理论上jdk版本不比我低并且maven版本在3.3以上都没问题,版本如图
开发步骤
创建一个名为demo-user的maven项目,如下图:
pom.xml文件:
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.xiaohh</groupId> <artifactId>demo-user</artifactId> <version>1.0-SNAPSHOT</version> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <maven.compiler.source>8</maven.compiler.source> <maven.compiler.target>8</maven.compiler.target> </properties> </project>
当我们来到我们本次讲解的版本的官方文档,可以看到更详细的讲解,来到Getting Started的Creating the POM可以看到我们的maven需要继承一个父项目,代码为
<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.3.9.RELEASE</version> </parent>
将其粘贴到项目中:
注意要刷新maven项目,然后我们来到爷爷辈的maven父项目可以看到很多的starter
需要注意SpringBoot之所以能够快速搭建项目,其原理还是使用starter快速导包和SpringBoot的快速配置,其中SpringMVC的starter如下,导入这个starter即可导入web相关的所有依赖:
依赖代码:
<!-- SpringMVC 相关的依赖 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency>
可以看出我们导入了MVC相关jar包(记得刷新maven项目,下面操作不在提醒,请自觉刷新)
然后我们建立一个启动类 com.xiaohh.user.UserApplication,代码如下:
package com.xiaohh.user; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; /** * <p> * SpringBoot 项目的启动类 * </p> * * @author XiaoHH * @version 1.0 * @date 2021-02-22 星期一 19:00:40 * @file UserApplication.java */ @SpringBootApplication public class UserApplication { public static void main(String[] args) { SpringApplication.run(UserApplication.class); } }
然后我们再建立一个 application.yml 在resources中,代码如下:
server: port: 80 # 设置端口号为 80 servlet: context-path: /user # 设置一下访问项目的上下文
然后我们编写一个测试用的 Controller 试一下是否搭建成功
package com.xiaohh.user.controllers; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; /** * <p> * 测试使用的 controller * </p> * * @author XiaoHH * @version 1.0 * @date 2021-02-22 星期一 19:05:19 * @file TestController.java */ @RestController @RequestMapping("/v1/test") public class TestController { @GetMapping public String hello() { return "hello"; } }
接下来我们启动一下启动类,控制台看到如下界面表示启动成功
接下来我们访问一下这个 Controller 看一下是否成功,可以看到访问是没有问题的
然后我们再来创建对应的数据库:
SET NAMES `UTF8`; DROP DATABASE IF EXISTS `demo_user`; CREATE DATABASE `demo_user`; USE `demo_user`; -- 创建用户表 CREATE TABLE `user` ( `id` BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '用户 ID', `username` VARCHAR(20) NOT NULL COMMENT '用户名', `password` VARCHAR(20) NOT NULL COMMENT '密码', `birthday` DATE COMMENT '出生日期' );
和对应的实体类
package com.xiaohh.user.entities; import lombok.*; import lombok.experimental.Accessors; import java.io.Serializable; import java.util.Date; /** * <p> * 对应数据库中的 user 表 * </p> * * @author XiaoHH * @version 1.0 * @date 2021-02-22 星期一 19:23:56 * @file User.java */ @Getter @Setter @NoArgsConstructor @AllArgsConstructor @ToString @Accessors(chain = true) public class User implements Serializable { /** * 用户 ID */ private Long id; /** * 用户名 */ private String username; /** * 密码 */ private String password; /** * 出生日期 */ @DateTimeFormat(pattern = "yyyy-MM-dd") // 前端传过来的数据格式 @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8") // 我们传给前端的数据格式 private Date birthday; /** * 计算年龄 * * @return 年龄 */ public int getAge() { if (this.birthday == null) return 0; // 现在的日期 Date now = new Date(); // 初始计算年龄 int age = now.getYear() - this.birthday.getYear(); // 设置成同年份然后进行比较 now.setYear(this.birthday.getYear()); // 将时间设置成当天的 0:00:00.000 now.setTime(now.getTime() - (now.getTime() % (1000 * 60 * 60 * 24)) - 1000 * 60 * 60 * 8); // this.birthday.setTime(this.birthday.getTime() - (this.birthday.getTime() % (1000 * 60 * 60 * 24)) - 1000 * 60 * 60 * 8); /* this.birthday.compareTo(now); 如果 birthday 比 now 大,则返回1,如果小返回-1(代表生日还没过),相等则返回0 */ age += this.birthday.compareTo(now); return age; } }
注意添加lombok相关依赖
<!-- Lombok 相关依赖 --> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> </dependency>