乘风原创程序

  • 使用maven快速搭建SpringBoot的SSM项目
  • 2021/2/23 10:14:29
  • 文档说明

    系统需要讲解

    开发步骤

    创建一个名为demo-user的maven项目,如下图:

    创建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 StartedCreating the POM可以看到我们的maven需要继承一个父项目,代码为

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.3.9.RELEASE</version>
    </parent>
    

    将其粘贴到项目中:

    SpringBoot父项目

    注意要刷新maven项目,然后我们来到爷爷辈的maven父项目可以看到很多的starter

    所有的starter

    需要注意SpringBoot之所以能够快速搭建项目,其原理还是使用starter快速导包和SpringBoot的快速配置,其中SpringMVC的starter如下,导入这个starter即可导入web相关的所有依赖:

    SpringMVC的starter

    依赖代码:

    <!-- SpringMVC 相关的依赖 -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    

    可以看出我们导入了MVC相关jar包(记得刷新maven项目,下面操作不在提醒,请自觉刷新)

    SpringMVC依赖导入成功

    然后我们建立一个启动类 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";
        }
    }
    

    接下来我们启动一下启动类,控制台看到如下界面表示启动成功

    SpringBoot启动成功

    接下来我们访问一下这个 Controller 看一下是否成功,可以看到访问是没有问题的

    测试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>
    

    然后接下来我们整合 mybatis,因为mybatis的starter不是spring官方提供的,那么我们就来mybatis官网来看一下如何编写starter:

    mybatis的starter

    代码如下:

    <!-- mybatis 相关依赖 -->
    <dependency>
        <groupId>org.mybatis.spring.boot</groupId>
        <artifactId>mybatis-spring-boot-starter</artifactId>
        <version>2.1.3</version>
    </dependency>
    

    顺便导入 MySQL 驱动包:

    <!-- MySQL 驱动包 -->
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
    </dependency>
    

    然后在 application.yml 中配置数据源:

    spring:
      datasource: # 数据源配置
        driver-class-name: com.mysql.cj.jdbc.Driver
        url: jdbc:mysql://127.0.0.1:3306/demo_user?useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=Asia/Shanghai
        username: root
        password: root
    

    然后配置mybatis:

    mybatis:
      mapper-locations: classpath:mybatis/mappers/UserMapper.xml
      type-aliases-package: com.xiaohh.user.entities
    

    接下来我们编写三层,因为代码量的原因我就直接将代码放在我的个人gitee上了,可自行下载,也可以按照地址克隆,要特别注意要在 Mapper 上加一个注解来代表这是一个 Mapper,其余的和普通的 SSM 没区别

    Mapper注解

    我们现在来看一下Controller层的方法抬头

    package com.xiaohh.user.controllers;
    
    import com.xiaohh.user.entities.User;
    import com.xiaohh.user.services.UserService;
    import com.xiaohh.user.utils.R;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.web.bind.annotation.*;
    
    /**
     * <p>
     *     user 对象的前端控制类
     * </p>
     */
    @RestController
    @RequestMapping("/v1/user")
    public class UserController {
    
        /**
         * 向数据库中添加一个数据的 Controller 接口
         * @param user 用户对象
         * @return 返回信息中包含是否成功
         */
        @PostMapping
        public R add(@RequestBody User user);
    
        /**
         * 用户对象列表查询
         * @return 用户对象的列表
         */
        @GetMapping
        public R list();
    
        /**
         * 根据 id 获取用户对象
         * @param id 用户 id
         * @return 用户对象
         */
        @GetMapping("/")
        public R get(@PathVariable("id") long id);
    
        /**
         * 根据用户 id 更新一个用户对象
         * @param user 用户对象
         * @return 是否成功
         */
        @PutMapping
        public R update(@RequestBody User user);
    
        /**
         * 根据用户 id 删除用户对象
         * @param id 用户 id
         * @return 是否成功
         */
        @DeleteMapping("/")
        public R delete(@PathVariable("id") long id);
    }
    

    那么我们运行起来之后来测试这个端口,使用postman

    注意,所有 RequestBody 的添加路径在:

    RequestBody的添加路径

    1. 测试添加接口

      url: http://127.0.0.1/user/v1/user
      RequestBody: {"username": "XiaoHH", "password": "XiaoHHSuperme", "birthday": "2021-02-22"}
      

      测试结果:

    添加接口测试返回的json

    数据库:

    添加接口测试之后的数据库

    1. 测试用户对象列表查询

      url: http://127.0.0.1/user/v1/user
      

      数据库:

    测试用户对象列表查询数据库

    测试结果:

    测试用户对象列表查询返回的json

    1. 测试根据 id 获取用户对象

      url: http://127.0.0.1/user/v1/user/1
      

      数据库同上,测试结果:

    测试根据 id 获取用户对象返回的json

    其余的请自己测试,本文不演示了

    精彩预告(更新预告)

    本文地址:https://blog.csdn.net/m0_51510236/article/details/113967278