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

0x02 创建方式选择
选择 “Spring Initializr” jdk1.8默认即可 然后点击下一步

0x03 完善项目信息
Group = 组名Artifact = 项目名Group 一般写公司名ArtifictId 一般写项目名例如我图中 Artifact = demo那么最终目录结构就是 src->main->java->com->example->demo点击下一步

0x04 选择组件
SpringBoot版本选择2.5.1Web 选择 (Spring Web)Template Engines 选择 (Thymeleaf)SQL 选择 (JDBC API, MySQL Driver, MyBatis Framework)然后选择下一步

0x05 项目名与存放位置确定
项目名: SpringBootDemo选择好以后点击 完成 按钮请注意第一次加载的时候因为要下载资源所有会很慢,请等待!!!

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

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

0x07 测试的数据库 - 测试数据
这里我创建了一个test数据库里面有一个 user表字段为 id, username, password

0x08 SpringBoot项目分层
SpringBoot项目大概分为四层:Controller层:所有请求的入口,前后端交互的入口一般会在项目根路径创建一个文件夹:controller 文件夹 (存放XxxController.java)Service层:也叫服务层 或是 业务层,负责所有的业务逻辑例如: XxxService.java(业务接口类) XxxServiceImpl.java(业务实现类)一般会在项目根路径创建两个文件夹:service 文件夹 (存放XxxService.java)serviceImpl 文件夹 (存放XxxServiceImpl.java)Mapper层 或是叫 DAO层:持久层,负责java和数据库交互包括 interface 和 xml 两类文件例如: XxxMapper.java(数据库访问接口类) XxxMapper.xml(数据库链接实现)一般会创建两个文件夹:项目根路径创建(存放XxxMapper.java):mapper 文件夹项目resources文件夹下创建(存放XxxMapper.xml):mapper 文件夹Bean层 或是叫 Model层 在或是 Entity层:就是数据库表的映射实体类,存放POJO对象这里我习惯叫 Bean层 所以我创建的文件夹叫 bean 文件夹一般会在项目根路径创建一个文件夹:bean 文件夹(存放XxxBean.java)
依照上面四层,创建目录结构如下:
0x09 修改 application配置
# 查看resources文件夹 里面的 application.properties 修改为 application.yml
# application.yml配置文件内容# 注意:# 按照实际情况改即可# 记得要确定可以连接,不然启动的时候项目会爆错# 192.168.24.129:3306/test 的含义# 192.168.24.129 mysql连接地址# 3306 mysql连接端口# test mysql连接的数据库server:# 访问地址address: 127.0.0.1# 访问端口port: 8081spring:# 数据库配置datasource:# mysql连接地址url: jdbc:mysql://192.168.24.129:3306/test?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai# 用户名username: root# 密码password: 123456# 数据库链接驱动driver-class-name: com.mysql.jdbc.Driver# mybatis配置mybatis:# 指定sql映射文件位置,mapper下的所有.xml文件都是映射文件mapper-locations: classpath:mapper/*.xml# 数据库表的映射实体类存放位置,存放POJO对象type-aliases-package: com.example.demo.bean

0x10 修改 pom.xml配置
# 打开pom.xml搜索 <artifactId>mysql-connector-java</artifactId>然后修改为<dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.41</version></dependency>搜索 <artifactId>mybatis-spring-boot-starter</artifactId>然后修改为<dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>2.1.4</version></dependency>如果嫌弃麻烦的话,也可以使用我下面这个修改好的pom.xml
# 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 https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.5.1</version><relativePath/></parent><groupId>com.example</groupId><artifactId>demo</artifactId><version>0.0.1-SNAPSHOT</version><name>demo</name><description>Demo project for Spring Boot</description><properties><java.version>1.8</java.version></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-jdbc</artifactId></dependency><!--thymeleaf模板引擎配置--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-thymeleaf</artifactId></dependency><!--Web依赖--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!--MyBatis配置--><dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>2.1.4</version></dependency><!--MySQL数据库配置--><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.41</version></dependency><!--单元测试配置--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build></project>


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

# resources文件夹 下面的 templates文件夹 里面的 index.html界面源码<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><title>index</title></head><body>我是一个初始的SpringBoot展示界面</body></html>
0x12 创建 HelloController测试类

# HelloController.java 源码package com.example.demo.controller;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.RequestMapping;@Controllerpublic class HelloController {@RequestMapping("/Hello/index")public String index(){return "h_index";}}
# h_index.html 源码<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><title>Hello</title></head><body>我是控制器 HelloController 下的 index 方法</body></html>
0x13 运行项目启动类

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

0x02 使用IDEA连接数据库
点击右侧边框的Database
点击“加号”新建数据库连接

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


0x03 SpringBoot基本例子
0x03.1 @ResponseBody - 例子
# 解释一般在使用@RequestMapping后,返回值通常解析为跳转路径如果@ResponseBody后返回结果不会被解析为跳转路径,而是直接写入HTTP response body这个就是它的作用
# 新建个 TestController.java 然后添加一个方法# 代码如下:package com.example.demo.controller;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.ResponseBody;@Controllerpublic class TestController {// 方法直接返回字符串-测试@RequestMapping("/hello")@ResponseBodypublic String hello() {return "Hello World !!!";}}
0x03.2 在Controller中获取application.yml的值 - 例子
# 新建个 Test2Controller.java 然后添加一个方法# 代码如下:package com.example.demo.controller;import org.springframework.beans.factory.annotation.Value;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.ResponseBody;@Controllerpublic class Test2Controller {// 获取某个配置文件的值-测试@Value("${spring.datasource.username}")private String dbusername;// 方法直接返回字符串-测试@RequestMapping("/test2")@ResponseBodypublic String test() {return dbusername;}}
0x03.3 页面赋值 - 例子
# 新建个 Test3Controller.java 然后添加一个方法# 代码如下:package com.example.demo.controller;import org.springframework.stereotype.Controller;import org.springframework.ui.Model;import org.springframework.web.bind.annotation.RequestMapping;@Controllerpublic class Test3Controller {// 页面赋值-测试@RequestMapping("/test3")public String test(Model model) {model.addAttribute("name", "小明");model.addAttribute("age", 24);model.addAttribute("info", "我是一个爱打机的青年");return "test3";}}
# 接着在resources 里面的 templates文件下新建 test3.html页面# 用来接收赋值# 代码如下:<!DOCTYPE html><html><head><meta charset="UTF-8"><title>test3</title></head><body>姓名:<input type="text" th:value="${name}"><br/>年龄:<input type="text" th:value="${age}"><br/>简介:<input type="text" th:value="${info}"><br/></body></html>
0x04 其它例子: 登录功能
0x04.1 生成Bean实体类
# 依据 user数据表,生成set和get方法# bean 目录创建个 UserBean.java# 注意: 在application配置文件中mybatis:type-aliases-package:(对应的就是该文件地址)package com.example.demo.bean;public class UserBean {private int id;private String username;private String password;public int getId() {return this.id;}public void setId(int id) {this.id = id;}public String getUsername() {return this.username;}public void setUsername(String username) {this.username = username;}public String getPassword() {return this.password;}public void setPassword(String password) {this.password = password;}}
0x04.2 Mapper层-生成数据库接口
# mapper 目录创建个 UserMapper.javapackage com.example.demo.mapper;import com.example.demo.bean.UserBean;import org.apache.ibatis.annotations.Mapper;@Mapperpublic interface UserMapper {UserBean getInfo(String username, String password);}
0x04.3 Mapper层-生成数据库实现文件
# resources目录下面的 mapper 目录里 创建一个文件叫做 UserMapper.xml# 注意: 在application配置文件中mybatis:mapper-locations:(对应的就是该文件地址)# mybatis:mapper-locations == 指定sql映射文件位置,resources目录mapper下的所有.xml文件都是映射文件# 注意namespace 与 resultType 要填写对应好,不然会爆绑定失败<?xml version="1.0" encoding="utf-8" ?><!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" ><mapper namespace="com.example.demo.mapper.UserMapper"><select id="getInfo" parameterType="String" resultType="com.example.demo.bean.UserBean">SELECT * FROM user WHERE username = #{username} AND password = #{password}</select></mapper>
0x04.4 Service层-生成业务接口
# service 目录创建个 UserService.javapackage com.example.demo.service;import com.example.demo.bean.UserBean;public interface UserService {UserBean loginIn(String username,String password);}
0x04.5 Service层-生成业务实现接口
# serviceImpl 目录创建个 UserServiceImpl.javapackage com.example.demo.serviceImpl;import com.example.demo.bean.UserBean;import com.example.demo.mapper.UserMapper;import com.example.demo.service.UserService;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Service;@Servicepublic class UserServiceImpl implements UserService {@Autowiredprivate UserMapper userMapper;@Overridepublic UserBean loginIn(String username, String password) {return userMapper.getInfo(username,password);}}
0x04.6 项目启动类添加@MapperScan注解
# src.main.java.com.example.demo 这个根目录下的 DemoApplication.java 文件# 修改为如下: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);}}
0x04.7 编写单元测试类

# 编写一个单元测试类,查询看看是否可以调用刚刚写的方法,从数据库获取数据# DemoApplicationTests.java 文件# 源码如下:package com.example.demo;import com.example.demo.bean.UserBean;import com.example.demo.service.UserService;import org.junit.jupiter.api.Test;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.boot.test.context.SpringBootTest;@SpringBootTestclass DemoApplicationTests {@AutowiredUserService userService;@Testpublic void contextLoads() {UserBean userBean = userService.loginIn("admin","admin123");if (userBean != null) {System.out.println("该用户输入账号为: " + userBean.getUsername());System.out.println("该用户输入密码为: " + userBean.getPassword());System.out.println("返回的用户ID为: " + userBean.getId());} else {System.out.println("账号或是密码错误!");System.out.println("查询不到该用户");}}}



0x04.8 Controller层-生成对应的业务接口
# controller 目录创建个 PublicController.javapackage com.example.demo.controller;import com.example.demo.bean.UserBean;import com.example.demo.service.UserService;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RequestMethod;import org.springframework.web.bind.annotation.ResponseBody;@Controllerpublic class PublicController {// 将Service注入Web层@AutowiredUserService userService;@RequestMapping("/public/login")public String login() {return "login";}@RequestMapping(value = "/password/login", method = RequestMethod.POST)@ResponseBodypublic String passwordLogin(String username, String password) {UserBean userBean = userService.loginIn(username, password);if (userBean != null) {return "login_success";} else {return "login_error";}}}
0x04.9 创建登录界面
# 在resources 里面的 templates文件下新建login.html页面# login.html 源码<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><title>login</title></head><body><form role="form" action = "/password/login" method="post">账号:<input type="text" id="username" name = "username"> <br>密码:<input type="password" id = "password" name = "password"> <br><input type="submit" id = "login" value = "login"></form></body></html>

0x04.10 启动测试

打开:http://127.0.0.1:8081/public/login



