0x01 创建项目

0x01 打开idea 点击 创建新项目

image.png

0x02 创建方式选择

  1. 选择 Spring Initializr jdk1.8默认即可 然后点击下一步

image.png

0x03 完善项目信息

  1. Group = 组名
  2. Artifact = 项目名
  3. Group 一般写公司名
  4. ArtifictId 一般写项目名
  5. 例如我图中 Artifact = demo
  6. 那么最终目录结构就是 src->main->java->com->example->demo
  7. 点击下一步

image.png

0x04 选择组件

  1. SpringBoot版本选择2.5.1
  2. Web 选择 (Spring Web)
  3. Template Engines 选择 (Thymeleaf)
  4. SQL 选择 (JDBC API, MySQL Driver, MyBatis Framework)
  5. 然后选择下一步

image.png

0x05 项目名与存放位置确定

  1. 项目名: SpringBootDemo
  2. 选择好以后点击 完成 按钮
  3. 请注意第一次加载的时候因为要下载资源所有会很慢,请等待!!!

image.png

0x06 刚创建好的项目目录结构

image.png

  1. 如果等了很久也没有自动导包,可以点击右边的 Maven按钮
  2. 里面有个重新导包功能 重新下载包 的功能
  3. 如下图

image.png

0x07 测试的数据库 - 测试数据

  1. 这里我创建了一个test数据库
  2. 里面有一个 user
  3. 字段为 id, username, password

image.png

测试使用的test数据库.zip

0x08 SpringBoot项目分层

  1. SpringBoot项目大概分为四层:
  2. Controller层:
  3. 所有请求的入口,前后端交互的入口
  4. 一般会在项目根路径创建一个文件夹:
  5. controller 文件夹 (存放XxxController.java)
  6. Service层:
  7. 也叫服务层 或是 业务层,负责所有的业务逻辑
  8. 例如: XxxService.java(业务接口类) XxxServiceImpl.java(业务实现类)
  9. 一般会在项目根路径创建两个文件夹:
  10. service 文件夹 (存放XxxService.java)
  11. serviceImpl 文件夹 (存放XxxServiceImpl.java)
  12. Mapper层 或是叫 DAO层:
  13. 持久层,负责java和数据库交互
  14. 包括 interface 和 xml 两类文件
  15. 例如: XxxMapper.java(数据库访问接口类) XxxMapper.xml(数据库链接实现)
  16. 一般会创建两个文件夹:
  17. 项目根路径创建(存放XxxMapper.java):
  18. mapper 文件夹
  19. 项目resources文件夹下创建(存放XxxMapper.xml):
  20. mapper 文件夹
  21. Bean层 或是叫 Model层 在或是 Entity层:
  22. 就是数据库表的映射实体类,存放POJO对象
  23. 这里我习惯叫 Bean层 所以我创建的文件夹叫 bean 文件夹
  24. 一般会在项目根路径创建一个文件夹:
  25. bean 文件夹(存放XxxBean.java)

依照上面四层,创建目录结构如下:
image.png

0x09 修改 application配置

  1. # 查看resources文件夹 里面的 application.properties 修改为 application.yml
  1. # application.yml配置文件内容
  2. # 注意:
  3. # 按照实际情况改即可
  4. # 记得要确定可以连接,不然启动的时候项目会爆错
  5. # 192.168.24.129:3306/test 的含义
  6. # 192.168.24.129 mysql连接地址
  7. # 3306 mysql连接端口
  8. # test mysql连接的数据库
  9. server:
  10. # 访问地址
  11. address: 127.0.0.1
  12. # 访问端口
  13. port: 8081
  14. spring:
  15. # 数据库配置
  16. datasource:
  17. # mysql连接地址
  18. url: jdbc:mysql://192.168.24.129:3306/test?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai
  19. # 用户名
  20. username: root
  21. # 密码
  22. password: 123456
  23. # 数据库链接驱动
  24. driver-class-name: com.mysql.jdbc.Driver
  25. # mybatis配置
  26. mybatis:
  27. # 指定sql映射文件位置,mapper下的所有.xml文件都是映射文件
  28. mapper-locations: classpath:mapper/*.xml
  29. # 数据库表的映射实体类存放位置,存放POJO对象
  30. type-aliases-package: com.example.demo.bean

image.png

0x10 修改 pom.xml配置

  1. # 打开pom.xml
  2. 搜索 <artifactId>mysql-connector-java</artifactId>
  3. 然后修改为
  4. <dependency>
  5. <groupId>mysql</groupId>
  6. <artifactId>mysql-connector-java</artifactId>
  7. <version>5.1.41</version>
  8. </dependency>
  9. 搜索 <artifactId>mybatis-spring-boot-starter</artifactId>
  10. 然后修改为
  11. <dependency>
  12. <groupId>org.mybatis.spring.boot</groupId>
  13. <artifactId>mybatis-spring-boot-starter</artifactId>
  14. <version>2.1.4</version>
  15. </dependency>
  16. 如果嫌弃麻烦的话,也可以使用我下面这个修改好的pom.xml
  1. # pom.xml配置
  2. <?xml version="1.0" encoding="UTF-8"?>
  3. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
  5. <modelVersion>4.0.0</modelVersion>
  6. <parent>
  7. <groupId>org.springframework.boot</groupId>
  8. <artifactId>spring-boot-starter-parent</artifactId>
  9. <version>2.5.1</version>
  10. <relativePath/>
  11. </parent>
  12. <groupId>com.example</groupId>
  13. <artifactId>demo</artifactId>
  14. <version>0.0.1-SNAPSHOT</version>
  15. <name>demo</name>
  16. <description>Demo project for Spring Boot</description>
  17. <properties>
  18. <java.version>1.8</java.version>
  19. </properties>
  20. <dependencies>
  21. <dependency>
  22. <groupId>org.springframework.boot</groupId>
  23. <artifactId>spring-boot-starter-jdbc</artifactId>
  24. </dependency>
  25. <!--thymeleaf模板引擎配置-->
  26. <dependency>
  27. <groupId>org.springframework.boot</groupId>
  28. <artifactId>spring-boot-starter-thymeleaf</artifactId>
  29. </dependency>
  30. <!--Web依赖-->
  31. <dependency>
  32. <groupId>org.springframework.boot</groupId>
  33. <artifactId>spring-boot-starter-web</artifactId>
  34. </dependency>
  35. <!--MyBatis配置-->
  36. <dependency>
  37. <groupId>org.mybatis.spring.boot</groupId>
  38. <artifactId>mybatis-spring-boot-starter</artifactId>
  39. <version>2.1.4</version>
  40. </dependency>
  41. <!--MySQL数据库配置-->
  42. <dependency>
  43. <groupId>mysql</groupId>
  44. <artifactId>mysql-connector-java</artifactId>
  45. <version>5.1.41</version>
  46. </dependency>
  47. <!--单元测试配置-->
  48. <dependency>
  49. <groupId>org.springframework.boot</groupId>
  50. <artifactId>spring-boot-starter-test</artifactId>
  51. <scope>test</scope>
  52. </dependency>
  53. </dependencies>
  54. <build>
  55. <plugins>
  56. <plugin>
  57. <groupId>org.springframework.boot</groupId>
  58. <artifactId>spring-boot-maven-plugin</artifactId>
  59. </plugin>
  60. </plugins>
  61. </build>
  62. </project>

image.png
image.png

0x11 创建启动的初始页面

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

image.png

  1. # resources文件夹 下面的 templates文件夹 里面的 index.html界面源码
  2. <!DOCTYPE html>
  3. <html lang="en">
  4. <head>
  5. <meta charset="UTF-8">
  6. <title>index</title>
  7. </head>
  8. <body>
  9. 我是一个初始的SpringBoot展示界面
  10. </body>
  11. </html>

0x12 创建 HelloController测试类

image.png

  1. # HelloController.java 源码
  2. package com.example.demo.controller;
  3. import org.springframework.stereotype.Controller;
  4. import org.springframework.web.bind.annotation.RequestMapping;
  5. @Controller
  6. public class HelloController {
  7. @RequestMapping("/Hello/index")
  8. public String index(){
  9. return "h_index";
  10. }
  11. }
  1. # h_index.html 源码
  2. <!DOCTYPE html>
  3. <html lang="en">
  4. <head>
  5. <meta charset="UTF-8">
  6. <title>Hello</title>
  7. </head>
  8. <body>
  9. 我是控制器 HelloController 下的 index 方法
  10. </body>
  11. </html>

0x13 运行项目启动类

image.png

在浏览器中输入 http://127.0.0.1:8081
image.png
image.png

0x02 使用IDEA连接数据库

点击右侧边框的Database
点击“加号”新建数据库连接
image.png
image.png

找到配置 serverTimezone(时区) 填写进入 Asia/Shanghai
如下图:
image.png
image.png
image.png
image.png

0x03 SpringBoot基本例子

0x03.1 @ResponseBody - 例子

  1. # 解释
  2. 一般在使用@RequestMapping后,返回值通常解析为跳转路径
  3. 如果@ResponseBody后返回结果不会被解析为跳转路径,而是直接写入HTTP response body
  4. 这个就是它的作用
  1. # 新建个 TestController.java 然后添加一个方法
  2. # 代码如下:
  3. package com.example.demo.controller;
  4. import org.springframework.stereotype.Controller;
  5. import org.springframework.web.bind.annotation.RequestMapping;
  6. import org.springframework.web.bind.annotation.ResponseBody;
  7. @Controller
  8. public class TestController {
  9. // 方法直接返回字符串-测试
  10. @RequestMapping("/hello")
  11. @ResponseBody
  12. public String hello() {
  13. return "Hello World !!!";
  14. }
  15. }

image.png
image.png
image.png

0x03.2 在Controller中获取application.yml的值 - 例子

  1. # 新建个 Test2Controller.java 然后添加一个方法
  2. # 代码如下:
  3. package com.example.demo.controller;
  4. import org.springframework.beans.factory.annotation.Value;
  5. import org.springframework.stereotype.Controller;
  6. import org.springframework.web.bind.annotation.RequestMapping;
  7. import org.springframework.web.bind.annotation.ResponseBody;
  8. @Controller
  9. public class Test2Controller {
  10. // 获取某个配置文件的值-测试
  11. @Value("${spring.datasource.username}")
  12. private String dbusername;
  13. // 方法直接返回字符串-测试
  14. @RequestMapping("/test2")
  15. @ResponseBody
  16. public String test() {
  17. return dbusername;
  18. }
  19. }

image.png

0x03.3 页面赋值 - 例子

  1. # 新建个 Test3Controller.java 然后添加一个方法
  2. # 代码如下:
  3. package com.example.demo.controller;
  4. import org.springframework.stereotype.Controller;
  5. import org.springframework.ui.Model;
  6. import org.springframework.web.bind.annotation.RequestMapping;
  7. @Controller
  8. public class Test3Controller {
  9. // 页面赋值-测试
  10. @RequestMapping("/test3")
  11. public String test(Model model) {
  12. model.addAttribute("name", "小明");
  13. model.addAttribute("age", 24);
  14. model.addAttribute("info", "我是一个爱打机的青年");
  15. return "test3";
  16. }
  17. }
  1. # 接着在resources 里面的 templates文件下新建 test3.html页面
  2. # 用来接收赋值
  3. # 代码如下:
  4. <!DOCTYPE html>
  5. <html>
  6. <head>
  7. <meta charset="UTF-8">
  8. <title>test3</title>
  9. </head>
  10. <body>
  11. 姓名:<input type="text" th:value="${name}"><br/>
  12. 年龄:<input type="text" th:value="${age}"><br/>
  13. 简介:<input type="text" th:value="${info}"><br/>
  14. </body>
  15. </html>

image.png
image.png

0x04 其它例子: 登录功能

0x04.1 生成Bean实体类

  1. # 依据 user数据表,生成setget方法
  2. # bean 目录创建个 UserBean.java
  3. # 注意: application配置文件中mybatis:type-aliases-package:(对应的就是该文件地址)
  4. package com.example.demo.bean;
  5. public class UserBean {
  6. private int id;
  7. private String username;
  8. private String password;
  9. public int getId() {
  10. return this.id;
  11. }
  12. public void setId(int id) {
  13. this.id = id;
  14. }
  15. public String getUsername() {
  16. return this.username;
  17. }
  18. public void setUsername(String username) {
  19. this.username = username;
  20. }
  21. public String getPassword() {
  22. return this.password;
  23. }
  24. public void setPassword(String password) {
  25. this.password = password;
  26. }
  27. }

0x04.2 Mapper层-生成数据库接口

  1. # mapper 目录创建个 UserMapper.java
  2. package com.example.demo.mapper;
  3. import com.example.demo.bean.UserBean;
  4. import org.apache.ibatis.annotations.Mapper;
  5. @Mapper
  6. public interface UserMapper {
  7. UserBean getInfo(String username, String password);
  8. }

0x04.3 Mapper层-生成数据库实现文件

  1. # resources目录下面的 mapper 目录里 创建一个文件叫做 UserMapper.xml
  2. # 注意: 在application配置文件中mybatis:mapper-locations:(对应的就是该文件地址)
  3. # mybatis:mapper-locations == 指定sql映射文件位置,resources目录mapper下的所有.xml文件都是映射文件
  4. # 注意namespace 与 resultType 要填写对应好,不然会爆绑定失败
  5. <?xml version="1.0" encoding="utf-8" ?>
  6. <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
  7. <mapper namespace="com.example.demo.mapper.UserMapper">
  8. <select id="getInfo" parameterType="String" resultType="com.example.demo.bean.UserBean">
  9. SELECT * FROM user WHERE username = #{username} AND password = #{password}
  10. </select>
  11. </mapper>

0x04.4 Service层-生成业务接口

  1. # service 目录创建个 UserService.java
  2. package com.example.demo.service;
  3. import com.example.demo.bean.UserBean;
  4. public interface UserService {
  5. UserBean loginIn(String username,String password);
  6. }

0x04.5 Service层-生成业务实现接口

  1. # serviceImpl 目录创建个 UserServiceImpl.java
  2. package com.example.demo.serviceImpl;
  3. import com.example.demo.bean.UserBean;
  4. import com.example.demo.mapper.UserMapper;
  5. import com.example.demo.service.UserService;
  6. import org.springframework.beans.factory.annotation.Autowired;
  7. import org.springframework.stereotype.Service;
  8. @Service
  9. public class UserServiceImpl implements UserService {
  10. @Autowired
  11. private UserMapper userMapper;
  12. @Override
  13. public UserBean loginIn(String username, String password) {
  14. return userMapper.getInfo(username,password);
  15. }
  16. }

0x04.6 项目启动类添加@MapperScan注解

  1. # src.main.java.com.example.demo 这个根目录下的 DemoApplication.java 文件
  2. # 修改为如下:
  3. package com.example.demo;
  4. import org.mybatis.spring.annotation.MapperScan;
  5. import org.springframework.boot.SpringApplication;
  6. import org.springframework.boot.autoconfigure.SpringBootApplication;
  7. @SpringBootApplication
  8. @MapperScan("com.example.demo.mapper")
  9. public class DemoApplication {
  10. public static void main(String[] args) {
  11. SpringApplication.run(DemoApplication.class, args);
  12. }
  13. }

0x04.7 编写单元测试类

image.png

  1. # 编写一个单元测试类,查询看看是否可以调用刚刚写的方法,从数据库获取数据
  2. # DemoApplicationTests.java 文件
  3. # 源码如下:
  4. package com.example.demo;
  5. import com.example.demo.bean.UserBean;
  6. import com.example.demo.service.UserService;
  7. import org.junit.jupiter.api.Test;
  8. import org.springframework.beans.factory.annotation.Autowired;
  9. import org.springframework.boot.test.context.SpringBootTest;
  10. @SpringBootTest
  11. class DemoApplicationTests {
  12. @Autowired
  13. UserService userService;
  14. @Test
  15. public void contextLoads() {
  16. UserBean userBean = userService.loginIn("admin","admin123");
  17. if (userBean != null) {
  18. System.out.println("该用户输入账号为: " + userBean.getUsername());
  19. System.out.println("该用户输入密码为: " + userBean.getPassword());
  20. System.out.println("返回的用户ID为: " + userBean.getId());
  21. } else {
  22. System.out.println("账号或是密码错误!");
  23. System.out.println("查询不到该用户");
  24. }
  25. }
  26. }

image.png
image.png
image.png

0x04.8 Controller层-生成对应的业务接口

  1. # controller 目录创建个 PublicController.java
  2. package com.example.demo.controller;
  3. import com.example.demo.bean.UserBean;
  4. import com.example.demo.service.UserService;
  5. import org.springframework.beans.factory.annotation.Autowired;
  6. import org.springframework.stereotype.Controller;
  7. import org.springframework.web.bind.annotation.RequestMapping;
  8. import org.springframework.web.bind.annotation.RequestMethod;
  9. import org.springframework.web.bind.annotation.ResponseBody;
  10. @Controller
  11. public class PublicController {
  12. // 将Service注入Web层
  13. @Autowired
  14. UserService userService;
  15. @RequestMapping("/public/login")
  16. public String login() {
  17. return "login";
  18. }
  19. @RequestMapping(value = "/password/login", method = RequestMethod.POST)
  20. @ResponseBody
  21. public String passwordLogin(String username, String password) {
  22. UserBean userBean = userService.loginIn(username, password);
  23. if (userBean != null) {
  24. return "login_success";
  25. } else {
  26. return "login_error";
  27. }
  28. }
  29. }

0x04.9 创建登录界面

  1. # 在resources 里面的 templates文件下新建login.html页面
  2. # login.html 源码
  3. <!DOCTYPE html>
  4. <html lang="en">
  5. <head>
  6. <meta charset="UTF-8">
  7. <title>login</title>
  8. </head>
  9. <body>
  10. <form role="form" action = "/password/login" method="post">
  11. 账号:<input type="text" id="username" name = "username"> <br>
  12. 密码:<input type="password" id = "password" name = "password"> <br>
  13. <input type="submit" id = "login" value = "login">
  14. </form>
  15. </body>
  16. </html>

image.png

0x04.10 启动测试

image.png

打开:http://127.0.0.1:8081/public/login
image.png

账号: admin
密码: admin123
image.png

0x05 项目源码

SpringBootDemo.zip