目錄
前言
一、創建SpringBoot項目
1. 創建項目
2. 運行項目
二、連接數據庫實現登錄
1. pom.xml文件引入依賴包
2. application.yml文件配置
3.?數據持久層,mybatis操作映射
4.?Service接口及實現
5.?Controller代碼
6.?Thymeleaf頁面登錄
7. 運行項目
8. 補充說明一下Controller中參數的接收
總結
前言
SpringBoot很多人都比較熟悉了,今天再從頭來一次項目創建及使用。順帶做一次文章記錄。
一、創建SpringBoot項目
1. 創建項目
IDEA 2021 創建:SpringBoot默認jar包格式、選擇JDK17往上才能匹配SpringBoot3.x。
點擊Next下一步后:選擇springboot3.0.2版本、勾選Spring Web起步依賴。
得到項目結構如下:(已經是一個基礎的MVC架構模式了)
2. 運行項目
應為項目目前已經是一個基礎的MVC架構模式了,所以不用多做什么就可以直接運行了。
yml文件配置:
BasicController控制器代碼:
SpringBoot項目是運行@SpringBootApplication注解的類(WqinfoApplication.java):
我們訪問地址:http://127.0.0.1:8080/html得到如下結果:
網頁結果:訪問BasicController控制器中的/html請求映射到了index.html頁面顯示。
相當的簡單就搭建運行起了一個項目。這就是SpringBoot。
二、連接數據庫實現登錄
1. pom.xml文件引入依賴包
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-jpa</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-thymeleaf</artifactId></dependency><dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>3.0.4</version></dependency><dependency><groupId>com.oracle.database.jdbc</groupId><artifactId>ojdbc8</artifactId><scope>runtime</scope></dependency><dependency><groupId>cn.easyproject</groupId><artifactId>orai18n</artifactId><version>12.1.0.2.0</version></dependency>
2. application.yml文件配置
3.?數據持久層,mybatis操作映射
package com.wq.wqinfo.persistence;import com.wq.wqinfo.domain.User;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;/*** @author lv* @date 2025年8月11日10點01分* 數據持久層,mybatis操作映射*/
@Mapper
public interface UserMapper {/*** 根據用戶名查詢* @param username 用戶名* @return*/@Select("select * from SYS_USER where USERNAME=#{username}")User findByUsername(String username);
}
4.?Service接口及實現
package com.wq.wqinfo.service;import com.wq.wqinfo.domain.User;/*** @author lv* @date 2025年8月11日10點22分* 業務層接口類*/
public interface UserService {/**** @param user* @return*/public String login(User user);
}
package com.wq.wqinfo.service.impl;import com.wq.wqinfo.domain.User;
import com.wq.wqinfo.persistence.UserMapper;
import com.wq.wqinfo.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;import java.util.UUID;/*** @author lv* @date 2025年8月11日10點22分* 業務層接口類*/
@Service
public class UserServiceImpl implements UserService {/*** 注入UserMapper獲取數據庫用戶信息*/@Autowiredprivate UserMapper userMapper;@Overridepublic String login(User user) {System.out.println("UserServiceImpl-login-----" + user);User user2=userMapper.findByUsername(user.getUsername());System.out.println("用戶查詢----用戶名:" + user2.getUsername()+",密碼:"+ user2.getPassword());if(user2!=null){ //省略了密碼對比環節//生成tokenString token= UUID.randomUUID().toString();return token;}return null;}}
5.?Controller代碼
package com.wq.wqinfo.controller;import com.wq.wqinfo.domain.User;
import com.wq.wqinfo.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.*;/*** @author lv* @date 2025年8月11日16點10分* 業務層接口類*/
@Controller
@RequestMapping("/user")
public class UserController {//自動裝配@Autowiredprivate UserService userService;/*** 登錄* @param username* @param password* @param model* @return*/@PostMapping("/login")public String login(String username, String password, Model model){System.out.println("------login.............."+username+"---"+password);User user=new User();user.setUsername(username);user.setPassword(password);String token= userService.login(user);System.out.println("....login...token:"+token);if(token!=null){model.addAttribute("msg",user.getUsername()+"登錄成功!");return "success";}model.addAttribute("msg",user.getUsername()+"登錄失敗!");return "error";}@GetMapping("/index")public String index(){System.out.println("用戶進入登錄頁面---------........");return "logins"; //沒使用json返回,直接映射到自定義登錄的頁面}
}
6.?Thymeleaf頁面登錄
logins.html (引入了th,Thymeleaf模板)
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head><meta charset="UTF-8"><title>Title</title>
</head>
<body>
<form th:action="@{/user/login}" method="post"><!--<input type="hidden" name="_csrf" th:value="${_csrf.token}" />--><!--注意:頁面提交方式必須為 post 請求,用戶名,密碼必須為username,password可以通過 usernameParameter()和 passwordParameter()方法修改默認配置-->用戶名:<input type="text" name="username"><br/>密碼:<input type="text" name="password"><br/><input type="submit" value="login"></form>
</body>
</html>
success.html(引入了th,Thymeleaf模板)
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head><meta charset="UTF-8"><title>Title</title>
</head>
<body>
<span th:text="${msg}"></span>
<h3>success 歡迎你的到來!你成功訪問此方法...</h3>
<br> <a href="/logout">退出</a>
</body>
</html>
error.html
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title>
</head>
<body>
<h3>error 歡迎你的到來!你沒有權限訪問...</h3>
</body>
</html>
7. 運行項目
訪問http://127.0.0.1:8080/user/index
就是訪問Controller層的方法/index,映射請求到logins.html登錄頁面。直接訪問頁面不能訪問到。
輸入用戶名,密碼后登錄成功。
8. 補充說明一下Controller中參數的接收
(1)public String login(String username, String password, Model model)
(2)public String login(User user, Model model)--User實體類中包含username和password
以上兩種方式都能接收到頁面POST的用戶名和密碼。
傳遞參數的時候還可以使用注解@PathVariable或@RequestParam:
@PathVariable
獲取路徑參數。即url/{id}這種形式。
@RequestParam
獲取查詢參數。即url?name=這種形式。或 psot表單中的參數。
@RequestBody,接收的是請求體里面的數據
當你使用@RequestBody注解時,Spring期望請求的Content-Type頭部為application/json。如果請求的Content-Type不是這個值,Spring將無法正確解析請求體中的JSON數據。導致無法請求(POST)到對應的控制層Controller方法。
總結
在這個SpringBoot項目中我也嘗試使用過JSP來弄頁面,但是可惜我沒有弄成功,所以后面也沒有堅持了。但是聽說是可以弄成功的。沒有堅持的原因是:SpringBoot默認不支持 JSP ,因此推薦使用Thymeleaf。Thymeleaf語法更簡單,功能更強大,支持HTML、XML、JavaScript等格式,且與Spring框架高度集成。
附加:
最后我又百度了一下兩個問題:僅參考一下