手把手教你从0搭建SpringBoot项目
作者:mmseoamin日期:2023-12-20

在银行呆了一年,很久没写SpringBoot项目了,搭建一个简单的SpringBoot项目回顾下

用到的工具:idea 2021、Maven 3.6.3、postman

框架:SpringBoot、Mybatis

数据库:Mysql8.0.30

一、Maven 安装&配置

安装&配置参考博文

注意:

1.下载maven注意idea与Maven版本的适配:

	IDEA 2022 兼容maven 3.8.1及之前的所用版本
	IDEA 2021 兼容maven 3.8.1及之前的所用版本
	IDEA 2020 兼容Maven 3.6.3及之前所有版本
	IDEA 2018 兼容Maven3.6.1及之前所有版本

2.为了避免每次创建项目都要改Maven配置,可以修改idea创建新项目的设置

手把手教你从0搭建SpringBoot项目,在这里插入图片描述,第1张

二、安装数据库

mysql8安装参考博文

三、设计库表(这里用的idea自带的数据库管理工具,其他诸如Dbeaver、SQLyog等也可以)

手把手教你从0搭建SpringBoot项目,在这里插入图片描述,第2张

手把手教你从0搭建SpringBoot项目,在这里插入图片描述,第3张

**注意:**连接不上往往是驱动的问题,把对应的驱动下载好即可

新建表

手把手教你从0搭建SpringBoot项目,在这里插入图片描述,第4张

新建字段手把手教你从0搭建SpringBoot项目,在这里插入图片描述,第5张

手把手教你从0搭建SpringBoot项目,在这里插入图片描述,第6张

添加数据

手把手教你从0搭建SpringBoot项目,在这里插入图片描述,第7张

注意:添加完成后需要提交

  • 添加的快捷键:alt+insert
  • 提交的快捷键:ctrl+enter

    四、搭建SpringBoot项目

    1.创建项目

    手把手教你从0搭建SpringBoot项目,在这里插入图片描述,第8张

    手把手教你从0搭建SpringBoot项目,在这里插入图片描述,第9张

    2. 勾选会用到的依赖

    手把手教你从0搭建SpringBoot项目,在这里插入图片描述,第10张

    手把手教你从0搭建SpringBoot项目,在这里插入图片描述,第11张

    3.项目刚创建好时的结构(图片是拷贝的别人的,所以项目名不一致,别在意,重点关注项目结构即可)

    手把手教你从0搭建SpringBoot项目,在这里插入图片描述,第12张

    4.templates文件下新建index.html页面,作为启动的初始页面

    手把手教你从0搭建SpringBoot项目,在这里插入图片描述,第13张

    
    
    
        
        Hello
    
    
    SpringBoot 简单启动页面
    
    
    

    5. 在com.susu.testsimplespringboot下新建controller文件夹,在controller文件夹下建一个简单的LoginController类;(Controller类要添加@Controller注解,项目启动时,SpringBoot会自动扫描加载Controller)

    手把手教你从0搭建SpringBoot项目,在这里插入图片描述,第14张

    手把手教你从0搭建SpringBoot项目,在这里插入图片描述,第15张

    package com.susu.testsimplespringboot;
    import org.springframework.stereotype.Controller;
    import org.springframework.web.bind.annotation.RequestMapping;
    /**
     * @ClassName HelloController
     * @Description TODO
     * @Author susu
     * @Date 2023/4/9 15:53
     * @Version 1.0
     */
    @Controller
    public class HelloController {
        @RequestMapping("/index")
        public String sayHello() {
            return "index";
        }
    }
    

    6.在resources文件夹下application中先配置DataSource基本信息

    application文件有两种文件格式,一种是以**.properties为后缀,一种是以.yml**为后缀的,两种配置方式略有差别,详情可参考:https://blog.csdn.net/qq_29648651/article/details/78503853;在这我是用.yml后缀的文件格式。右键application文件选择Refact,选择Rename,将后缀改为yml;

    spring:
      datasource:
        name: test
        url: jdbc:mysql://localhost:3306/test
        username: root
        password: root
        driver-class-name: com.mysql.cj.jdbc.Driver
    mybatis:
      mapper-locations: classpath:mapper/*.xml
      type-aliases-package: com.susu.testsimplespringboot.DTO.UserLoginDTO
    

    7. 运行项目TestSimpleSpringBootApplication.java(图片是拷贝的,所以文件名不一致,别在意,重点关注启动类没动过,直接启动即可)

    手把手教你从0搭建SpringBoot项目,在这里插入图片描述,第16张

    8.在浏览器中输入localhost:8080,回车显示初始的index界面

    手把手教你从0搭建SpringBoot项目,在这里插入图片描述,第17张

    9. SpringBoot 项目大概可以分为以下四层

    • mapper层(dao层)
    • service层(包括service接口、实现类)
    • controller层(web层)

      10.最终的项目结构

      手把手教你从0搭建SpringBoot项目,在这里插入图片描述,第18张

      11 项目代码展示

      (1)在application配置文件中添加:数据库配置、MyBatis配置:

      spring:
        datasource:
          name: test
          url: jdbc:mysql://localhost:3306/test
          username: root
          password: root
          driver-class-name: com.mysql.cj.jdbc.Driver
      mybatis:
        mapper-locations: classpath:mapper/*.xml
        type-aliases-package: com.susu.testsimplespringboot.DTO.UserLoginDTO
      

      (2)pom.xml

      
      
          4.0.0
          
              org.springframework.boot
              spring-boot-starter-parent
              2.7.10
               
          
          com.susu
          testSimpleSpringBoot
          0.0.1-SNAPSHOT
          testSimpleSpringBoot
          Demo project for Spring Boot
          
              1.8
          
          
              
                  org.springframework.boot
                  spring-boot-starter-jdbc
              
              
                  org.springframework.boot
                  spring-boot-starter-thymeleaf
              
              
                  org.springframework.boot
                  spring-boot-starter-web
              
              
                  org.mybatis.spring.boot
                  mybatis-spring-boot-starter
                  2.3.0
              
              
                  com.mysql
                  mysql-connector-j
                  runtime
              
              
                  org.springframework.boot
                  spring-boot-starter-test
                  test
              
          
          
              
                  
                      org.springframework.boot
                      spring-boot-maven-plugin
                  
              
          
      
      

      (3) 实体类

      UserLogin

      package com.susu.testsimplespringboot.pojo;
      /**
       * @ClassName UserLogin
       * @Description TODO
       * @Author susu
       * @Date 2023/4/9 16:25
       * @Version 1.0
       */
      public class UserLogin {
          private String userAccount;
          private String userPwd;
          public String getUserAccount() {
              return userAccount;
          }
          public void setUserAccount(String userAccount) {
              this.userAccount = userAccount;
          }
          public String getUserPwd() {
              return userPwd;
          }
          public void setUserPwd(String userPwd) {
              this.userPwd = userPwd;
          }
          @Override
          public String toString() {
              return "UserLogin{" +
                      "userAccount='" + userAccount + '\'' +
                      ", userPwd='" + userPwd + '\'' +
                      '}';
          }
      }
      

      UserLoginDTO (本质也是实体类,这里使用的原因是:数据库三个字段,实体类pojo中只有两个,无法映射,所以根据数据表添加一个三个属性的实体类DTO接收查询结果)

      package com.susu.testsimplespringboot.DTO;
      /**
       * @ClassName UserLoginDTO
       * @Description TODO
       * @Author susu
       * @Date 2023/4/9 16:49
       * @Version 1.0
       */
      public class UserLoginDTO {
          private int userNo;
          private String userAccount;
          private String userPwd;
          public int getUserNo() {
              return userNo;
          }
          public void setUserNo(int userNo) {
              this.userNo = userNo;
          }
          public String getUserAccount() {
              return userAccount;
          }
          public void setUserAccount(String userAccount) {
              this.userAccount = userAccount;
          }
          public String getUserPwd() {
              return userPwd;
          }
          public void setUserPwd(String userPwd) {
              this.userPwd = userPwd;
          }
      }
      

      (4)mapper接口

      package com.susu.testsimplespringboot.mapper;
      import com.susu.testsimplespringboot.DTO.UserLoginDTO;
      import org.apache.ibatis.annotations.Mapper;
      /**
       * @ClassName UserMapper
       * @Description TODO
       * @Author susu
       * @Date 2023/4/9 16:27
       * @Version 1.0
       */
      @Mapper
      public interface UserMapper {
          public abstract UserLoginDTO selectUserInfo(String userAccount, String userPwd);
      }
      

      (5)mapper映射文件(这个文件可以设置成idea自动提示的模板,避免每次都要自己写,方法如下图)

      
      
      
          
          
      
      

      手把手教你从0搭建SpringBoot项目,在这里插入图片描述,第19张

      注意!!!

      1. namespace、id的属性值

        namespace:mapper接口名;

        id:mapper接口中抽象方法的名字

      2. mybatis映射文件的一些技术点可参考下面的博文

        https://blog.csdn.net/zxdspaopao/article/details/112919320

      (6)service接口

      package com.susu.testsimplespringboot.service;
      import com.susu.testsimplespringboot.pojo.UserLogin;
      /**
       * @ClassName UserService
       * @Description TODO
       * @Author susu
       * @Date 2023/4/9 16:27
       * @Version 1.0
       */
      public interface UserService {
          public abstract UserLogin loginCheck(String userAccount, String userPwd);
      }
      

      (6)service实现类

      package com.susu.testsimplespringboot.serviceImpl;
      import com.susu.testsimplespringboot.DTO.UserLoginDTO;
      import com.susu.testsimplespringboot.service.UserService;
      import com.susu.testsimplespringboot.mapper.UserMapper;
      import com.susu.testsimplespringboot.pojo.UserLogin;
      import org.springframework.beans.factory.annotation.Autowired;
      import org.springframework.stereotype.Service;
      /**
       * @ClassName UserServiceImpl
       * @Description TODO
       * @Author susu
       * @Date 2023/4/9 16:37
       * @Version 1.0
       */
      @Service
      public class UserServiceImpl implements UserService {
          @Autowired
          UserMapper userMapper;
          @Override
          public UserLogin loginCheck(String userAccount, String userPwd) {
              UserLoginDTO userLoginDTO = userMapper.selectUserInfo(userAccount, userPwd);
              UserLogin userLogin = new UserLogin();
              if (userLoginDTO != null) {
                  userLogin.setUserAccount(userLoginDTO.getUserAccount());
                  userLogin.setUserPwd(userLoginDTO.getUserPwd());
              }
              return userLogin;
          }
      }
      

      (7)到此时,可以在测试类测试下Mapper层是否可以正常获取数据

      package com.susu.testsimplespringboot;
      import com.susu.testsimplespringboot.pojo.UserLogin;
      import com.susu.testsimplespringboot.service.UserService;
      import org.junit.jupiter.api.Test;
      import org.springframework.beans.factory.annotation.Autowired;
      import org.springframework.boot.test.context.SpringBootTest;
      @SpringBootTest
      class TestSimpleSpringBootApplicationTests {
          @Autowired
          UserService userService;
          @Test
          void contextLoads() {
              UserLogin userLogin = userService.loginCheck("huahua", "123");
              System.out.println(userLogin);
          }
      }
      

      (8)controller

      package com.susu.testsimplespringboot.controller;
      import com.susu.testsimplespringboot.DTO.UserLoginDTO;
      import com.susu.testsimplespringboot.pojo.UserLogin;
      import com.susu.testsimplespringboot.service.UserService;
      import org.springframework.beans.factory.annotation.Autowired;
      import org.springframework.stereotype.Controller;
      import org.springframework.web.bind.annotation.*;
      /**
       * @ClassName LoginController
       * @Description TODO
       * @Author susu
       * @Date 2023/4/9 16:27
       * @Version 1.0
       */
      @Controller
      //@ResponseBody
      public class LoginController {
          @Autowired
          UserService userService;
          /**
           * @param testGetStaticSource
           * @param index
           * @return
           */
          @RequestMapping("{testGetStaticSource}/{index}")
          public String getStaticSource(@PathVariable String testGetStaticSource, @PathVariable String index) {
              return testGetStaticSource + "/" + index;
          }
          @GetMapping(value = "login")
          public String login() {
              return "login";
          }
          @GetMapping(value = "loginIn")
          public String loginGet(String userAccount, String userPwd) {
              UserLogin user1 = userService.loginCheck(userAccount, userPwd);
              if (user1 != null) {
                  return "success";
              } else {
                  return "error";
              }
          }
          @PostMapping(value = "loginIn")
          public String loginPost(UserLoginDTO userLoginDTO) {
              UserLogin user1 = userService.loginCheck(userLoginDTO.getUserAccount(), userLoginDTO.getUserPwd());
              if (user1 != null) {
                  return "success";
              } else {
                  return "error";
              }
          }
      }
      

      注意:

      1.@RequestMapping,任何请求方式都可以

      2.@GetMapping,只能Get请求(前端请求方式如下所示)

      手把手教你从0搭建SpringBoot项目,在这里插入图片描述,第20张

      3.@PostMapping,只能Post请求

      3.1 用postman发送post请求参考博文

      3.2前端json格式报文:

      {
      "userAccount":"huahua",
      "userPwd":"123"
      }
      

      4.测试了获取templates文件下的静态资源

          @RequestMapping("{testGetStaticSource}/{index}")
          public String getStaticSource(@PathVariable String testGetStaticSource, @PathVariable String index) {
              return testGetStaticSource + "/" + index;
          }
      

      细节可以参考如下两篇博文

      https://blog.csdn.net/zhuzicc/article/details/105465814#%E9%97%AE%E9%A2%98%E5%8E%9F%E5%9B%A0

      https://blog.csdn.net/weixin_53106424/article/details/123502419

      此处涉及springmvc的原理:

      可以参考博文:

      https://blog.csdn.net/weixin_53106424/article/details/115309018?spm=1001.2014.3001.5502

      (9)几个静态文件

      9.1 login.html

      
      
      
          
          login
      
      
      
      账号:
      密码:

      9.2 success.html

      
      
      
          
          success
      
      
      

      登录成功

      9.3 error.html

      
      
      
          
          eoor
      
      
      

      登录失败