在銀行呆了一年,很久沒寫SpringBoot項目了,搭建一個簡單的SpringBoot項目回顧下
用到的工具:idea 2021、Maven 3.6.3、postman
框架:SpringBoot、Mybatis
數(shù)據(jù)庫: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.為了避免每次創(chuàng)建項目都要改Maven配置,可以修改idea創(chuàng)建新項目的設(shè)置
二、安裝數(shù)據(jù)庫
mysql8安裝參考博文
三、設(shè)計庫表(這里用的idea自帶的數(shù)據(jù)庫管理工具,其他諸如Dbeaver、SQLyog等也可以)
**注意:**連接不上往往是驅(qū)動的問題,把對應(yīng)的驅(qū)動下載好即可
新建表
新建字段
添加數(shù)據(jù)
注意:添加完成后需要提交
- 添加的快捷鍵:alt+insert
- 提交的快捷鍵:ctrl+enter
四、搭建SpringBoot項目
1.創(chuàng)建項目
2. 勾選會用到的依賴
3.項目剛創(chuàng)建好時的結(jié)構(gòu)(圖片是拷貝的別人的,所以項目名不一致,別在意,重點關(guān)注項目結(jié)構(gòu)即可)
4.templates文件下新建index.html頁面,作為啟動的初始頁面
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Hello</title>
</head>
<body>
SpringBoot 簡單啟動頁面
</body>
</html>
5. 在com.susu.testsimplespringboot下新建controller文件夾,在controller文件夾下建一個簡單的LoginController類;(Controller類要添加@Controller注解,項目啟動時,SpringBoot會自動掃描加載Controller)
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(圖片是拷貝的,所以文件名不一致,別在意,重點關(guān)注啟動類沒動過,直接啟動即可)
8.在瀏覽器中輸入localhost:8080,回車顯示初始的index界面
9. SpringBoot 項目大概可以分為以下四層
- mapper層(dao層)
- service層(包括service接口、實現(xiàn)類)
- controller層(web層)
10.最終的項目結(jié)構(gòu)
11 項目代碼展示
(1)在application配置文件中添加:數(shù)據(jù)庫配置、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
<?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.7.10</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.susu</groupId>
<artifactId>testSimpleSpringBoot</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>testSimpleSpringBoot</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>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.3.0</version>
</dependency>
<dependency>
<groupId>com.mysql</groupId>
<artifactId>mysql-connector-j</artifactId>
<scope>runtime</scope>
</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>
(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 (本質(zhì)也是實體類,這里使用的原因是:數(shù)據(jù)庫三個字段,實體類pojo中只有兩個,無法映射,所以根據(jù)數(shù)據(jù)表添加一個三個屬性的實體類DTO接收查詢結(jié)果)
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映射文件(這個文件可以設(shè)置成idea自動提示的模板,避免每次都要自己寫,方法如下圖)
<?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.susu.testsimplespringboot.mapper.UserMapper">
<!--驗證用戶賬號和密碼-->
<select id="selectUserInfo" parameterType="String" resultType="com.susu.testsimplespringboot.DTO.UserLoginDTO">
SELECT * FROM userLogin
WHERE userAccount = #{userAccount}
AND userPwd = #{userPwd};
</select>
</mapper>
注意?。。?/strong>
-
namespace、id的屬性值
namespace:mapper接口名;
id:mapper接口中抽象方法的名字 -
mybatis映射文件的一些技術(shù)點可參考下面的博文
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實現(xiàn)類
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層是否可以正常獲取數(shù)據(jù)
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請求(前端請求方式如下所示)
3.@PostMapping,只能Post請求
3.1 用postman發(fā)送post請求參考博文
3.2前端json格式報文:
{
"userAccount":"huahua",
"userPwd":"123"
}
4.測試了獲取templates文件下的靜態(tài)資源
@RequestMapping("{testGetStaticSource}/{index}")
public String getStaticSource(@PathVariable String testGetStaticSource, @PathVariable String index) {
return testGetStaticSource + "/" + index;
}
細節(jié)可以參考如下兩篇博文
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)幾個靜態(tài)文件
9.1 login.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>login</title>
</head>
<body>
<form role="form" action="/loginIn" method="post">
賬號:<input type="text" id="userAccount" name="userAccount"><br>
密碼:<input type="password" id="userPwd" name="userPwd"><br>
<input type="submit" id="login" value="login">
</form>
</body>
</html>
9.2 success.html文章來源:http://www.zghlxwxcb.cn/news/detail-776298.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>success</title>
</head>
<body>
<h1>登錄成功</h1>
</body>
</html>
9.3 error.html文章來源地址http://www.zghlxwxcb.cn/news/detail-776298.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>eoor</title>
</head>
<body>
<h1>登錄失敗</h1>
</body>
</html>
到了這里,關(guān)于手把手教你從0搭建SpringBoot項目的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!