java學習總結(八):Spring boot

一、SpringBoot簡介

傳統Spring開發缺點:
1、導入依賴繁瑣
2、項目配置繁瑣
Spring Boot是全新框架(更像是一個工具, 腳手架),是Spring提供的一個子項目, 用于快速構建Spring應用程序。
隨著Spring 3.0的發布,Spring 團隊逐漸開始擺脫XML配置文件,并且在開發過程中大量使用“約定優先配置”(convention over configuration)的思想來擺脫Spring框架中各類繁復紛雜的配置。
SpringBoot的特性:
  1. 起步依賴 jar包的管理 starter
  2. 自動配置 SpringBoot做了很多默認的配置
  3. 內置tomcat

二、創建SpringBoot項目

1、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>3.2.5</version><relativePath/> <!-- lookup parent from repository --></parent><groupId>com.situ</groupId><artifactId>springboot</artifactId><version>0.0.1-SNAPSHOT</version><name>springboot</name><description>springboot</description><properties><java.version>17</java.version></properties><dependencies><!--Spring相關依賴--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter</artifactId></dependency><!--SpringMVC相關依賴--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!-- mysql驅動 --><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.31</version></dependency><!-- mybatis --><dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId>f<version>3.0.3</version></dependency><!--thymeleaf相關依賴--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-thymeleaf</artifactId></dependency><!--lombok幫助我們生成實體類的構造方法、get、set、toString--><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.14</version><scope>provided</scope></dependency><!-- 分頁插件 --><dependency><groupId>com.github.pagehelper</groupId><artifactId>pagehelper-spring-boot-starter</artifactId><version>1.4.1</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>

2、SpringbootApplication啟動類

//SpringBoot項目啟動類
@SpringBootApplication
@MapperScan("com.situ.springboot.mapper")
public class SpringbootApplication {public static void main(String[] args) {SpringApplication.run(SpringbootApplication.class, args);}
}
@Controller
@RequestMapping("/admin")
public class AdminController {@RequestMapping("/selectAll")@ResponseBodypublic List<Admin> selectAll() {System.out.println("AdminController.selectAll");List<Admin> list = new ArrayList<>();Admin admin1 = new Admin();admin1.setId(1);admin1.setName("zhangsan");Admin admin2 = new Admin();admin2.setId(2);admin2.setName("list");Admin admin3 = new Admin();admin3.setId(3);admin3.setName("wangwu");list.add(admin1);list.add(admin2);list.add(admin3);return list;}
}

3、application.properties

server.port=8080#DB Configuration
spring.datasource.driverClassName=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/blog?useSSL=false&useUnicode=true&characterEncoding=utf8&serverTimezone=GMT%2b8&zeroDateTimeBehavior=CONVERT_TO_NULL
spring.datasource.username=root
spring.datasource.password=1234spring.mvc.static-path-pattern=/static/**#Spring MyBatis
mybatis.type-aliases-package=com.situ.springboot.pojo
mybatis.mapper-locations=classpath:mapper/*Mapper.xml
mybatis.configuration.map-underscore-to-camel-case=true
#log
mybatis.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl

4、AdminMapper.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd"><mapper namespace="com.situ.springboot.mapper.AdminMapper"><select id="selectAll" resultType="Admin">SELECT id,name,password,nick_name,role,image FROM admin</select>
</mapper>

三、Thymeleaf

<!--thymeleaf相關依賴-->
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>

application.properties:

spring.mvc.static-path-pattern=/static/**
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org/">
<head><title>主頁 </title><link rel="stylesheet" type="text/css" th:href="@{/static/layui/css/layui.css}"/><script th:src="@{/static/layui/layui.js}" type="text/javascript" charset="utf-8"></script>
</head>
@Controller
@RequestMapping("/page")
public class PageController {/*** /page/user/add     /page/login** @return*/@RequestMapping("/**")public String path(HttpServletRequest request) {String requestURI = request.getRequestURI();System.out.println("requestURI: " + requestURI);String[] paths = requestURI.split("/");//["","page","user","list"]//["","page","login"]if (paths.length == 4) {return paths[2] + "_" + paths[3];} else if (paths.length == 3) {return paths[2];} else {return "index";}}
}

四、登錄攔截器

//攔截器的作用:瀏覽器訪問服務器的請求,都要首先經過攔截器
public class LoginInterceptor implements HandlerInterceptor {@Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {////1.判斷用戶有沒有登錄//2.如果登錄了,就放行,可以訪問后臺的資源//3.如果沒有登錄,跳轉到登錄界面HttpSession session = request.getSession();Admin admin = (Admin) session.getAttribute("admin");if (admin == null) {//沒有登錄,跳轉到登錄界面response.sendRedirect("/page/login");return false;}//已經登錄,放行return true;}
}

攔截器配置

WebMvcConfigurer提供了配置SpringMVC底層的所有組件入口

// @Component    <bean>
// @Controller  @Service @Repository
// 這四個注解的作用是一樣的,下面三個不一樣主要是為了區分不同層// @Configuration用于定義配置類,可以替換xml配置文件,
// 加了這個注解的類的內部包含一個或多個被@Bean注解的方法
@Configuration
public class WebConfig implements WebMvcConfigurer {/* <bean name="admin" class="com.situ.springboot.pojo.Admin"/>*/@Beanpublic Admin createAdmin() {return new Admin();}//配置虛擬路徑@Overridepublic void addResourceHandlers(ResourceHandlerRegistry registry) {registry.addResourceHandler("/pic/**").addResourceLocations("file:/D:/mypic/");WebMvcConfigurer.super.addResourceHandlers(registry);}/*<!-- 配置攔截器 --><mvc:interceptors><mvc:interceptor><mvc:mapping path="/**"/><mvc:exclude-mapping path=""/><bean class="com.situ.mvc.interceptor.MyInterceptor1"></bean></mvc:interceptor></mvc:interceptors>*/// 這個方法用來注冊攔截器,我們寫的攔截器需要在這里配置才能生效@Overridepublic void addInterceptors(InterceptorRegistry registry) {//把登錄的攔截器配置上才能起作用// addPathPatterns("/**") 攔截器攔截所有的請求,靜態資源也攔截了,需要放行// excludePathPatterns 代表哪些請求不需要攔截registry.addInterceptor(new LoginInterceptor()).addPathPatterns("/**").excludePathPatterns("/page/login", "/admin/login", "/admin/logout", "/static/**");}
}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/898141.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/898141.shtml
英文地址,請注明出處:http://en.pswp.cn/news/898141.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

vue-router實現

實現一個簡化版的 vue-router 可以幫助我們更好地理解 Vue 路由是如何工作的。Vue Router 主要的功能是基于瀏覽器的 URL 來管理組件的顯示&#xff0c;能夠根據 URL 變化切換不同的視圖。下面是一個簡化版的實現&#xff0c;用于幫助你理解基本的路由機制。 創建一個簡單的 V…

Redis 服務器:核心功能與優化實踐

Redis 服務器:核心功能與優化實踐 引言 Redis(Remote Dictionary Server)是一款高性能的鍵值對存儲系統,廣泛用于緩存、消息隊列、實時排行榜等場景。本文將深入探討Redis服務器的核心功能,并提供一些優化實踐的技巧,以幫助讀者更好地理解和運用Redis。 Redis的核心功…

openEuler24.03 LTS下安裝MySQL8

前提條件 擁有openEuler24.03 LTS環境&#xff0c;可參考&#xff1a;Vmware下安裝openEuler24.03 LTS 步驟 卸載原有mysql及mariadb sudo systemctl stop mysql mysqld 2>/dev/null sudo rpm -qa | grep -i mysql\|mariadb | xargs -n1 sudo rpm -e --nodeps 2>/dev/…

GLOW-TTS

我首先需要理解用戶的指令&#xff0c;用戶希望我翻譯文章的3.1節“Training and Inference Procedures”部分。為了完成這個任務&#xff0c;我需要仔細閱讀文章的3.1節&#xff0c;理解其中的技術細節和概念&#xff0c;然后將這些內容準確地翻譯成中文。 在閱讀3.1節時&…

【算法思想】高精度

引入 首先了解&#xff1a; 1. int 范圍為10^9 2. long long 范圍數量級為10^18 如果超過該數量級&#xff0c;該怎么辦&#xff1f; ——這就是高精度、大數的算法問題 加法 輸入兩個整數a,b,輸出他們的和&#xff08;<10的500次方&#xff09; 核心是加法的核心——》每…

【失敗了】LazyGraphRAG利用本地ollama提供Embedding model服務和火山引擎的deepseek API構建本地知識庫

LazyGraphRAG測試結果如下 數據&#xff1a; curl https://www.gutenberg.org/cache/epub/24022/pg24022.txt -o ./ragtest/input/book.txt 失敗了 氣死我也&#xff01;&#xff01;&#xff01;對deepseek-V3也不是很友好啊&#xff0c;我沒錢prompt 微調啊&#xff0c;暈死…

ccfcsp3402矩陣重塑(其二)

//矩陣重塑&#xff08;其二&#xff09; #include<iostream> using namespace std; int main(){int n,m,t;cin>>n>>m>>t;int c[10000][10000];int s0,sum0;int d[10000],k[100000];for(int i0;i<n;i){for(int j0;j<m;j){cin>>c[i][j];d[s…

算法-除自身以外數組的乘積

力扣題目&#xff1a;238. 除自身以外數組的乘積 - 力扣&#xff08;LeetCode&#xff09; 題目描述&#xff1a; 給你一個整數數組 nums&#xff0c;返回 數組 answer &#xff0c;其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘積 。 題目數據 保證 數組 nums…

Unity Shader - UI Sprite Shader之簡單摳圖效果

Sprite摳圖效果&#xff1a; 前言 在PhotoShop中我們經常會用到摳圖操作&#xff0c;現在就用Shader實現一個簡單的摳圖效果。 實現原理&#xff1a; 使用當前像素顏色與需要摳掉的顏色相減作比較&#xff0c;然后與一個指定的閾值比較以決定是否將其顯示出來&#xff1b; U…

【Mac】安裝 Parallels Desktop、Windows、Rocky Linux

一、安裝PD 理論上&#xff0c;PD只支持試用15天&#xff01;當然&#xff0c;你懂的。 第一步&#xff0c;在 Parallels Desktop for Mac 官網 下載 Install Parallels Desktop.dmg第二步&#xff0c;雙擊 Install Parallels Desktop.dmg 第三步&#xff0c;雙擊安裝Paralle…

學習單片機需要多長時間才能進行簡單的項目開發?

之前有老鐵問我&#xff0c;學單片機到底要多久&#xff0c;才能進行簡單的項目開發&#xff1f;是三個月速成&#xff0c;還是三年磨一劍&#xff1f; 今天咱們就來聊聊這個話題&#xff0c;我不是什么高高在上的專家&#xff0c;就是個踩過無數坑、燒過幾塊板子的“技術老友”…

pyqt 上傳文件或者文件夾打包壓縮文件并添加密碼并將密碼和目標文件信息保存在json文件

一、完整代碼實現 import sys import os import json import pyzipper from datetime import datetime from PyQt5.QtWidgets import (QApplication, QWidget, QVBoxLayout, QHBoxLayout,QPushButton, QLineEdit, QLabel, QFileDialog,QMessageBox, QProgressBar) from PyQt5.…

centos操作系統上傳和下載百度網盤內容

探序基因 整理 進入百度網盤官網百度網盤 客戶端下載 下載linux的rpm格式的安裝包 在linux命令行中輸入&#xff1a;rpm -ivh baidunetdisk_4.17.7_x86_64.rpm 出現報錯&#xff1a; 錯誤&#xff1a;依賴檢測失敗&#xff1a; libXScrnSaver 被 baidunetdisk-4.17.7-1.x8…

LeetCode134?加油站

關聯LeetCode題號134 本題特點 貪心局部最優解-部分差值 如果小于0&#xff08;消耗大于油站油量&#xff09; 就從下一個加油站開始&#xff0c;因為如果中間有小于0的情況 當前站就不可能是始發站&#xff0c;整體最優解-整體差值 如果小于0 &#xff0c;那么就是不能有始發…

基于 Verilog 的時序設計:從理論到實踐的深度探索

在數字電路設計領域,時序設計是一個至關重要的環節,它涉及到組合邏輯電路與時序邏輯電路的設計差異、時鐘信號的運用以及觸發器的工作原理等多個方面。本文將圍繞基于 Verilog 的時序設計實驗展開,詳細闡述實驗過程、代碼實現以及結果分析,幫助讀者深入理解時序設計的核心概…

藍牙系統的核心組成解析

一、硬件層&#xff1a;看得見的物理載體 1. 射頻模塊&#xff08;Radio Frequency Module&#xff09; 專業描述&#xff1a;工作在2.4GHz ISM頻段&#xff0c;支持GFSK/π/4 DQPSK/8DPSK調制方式 功能類比&#xff1a;相當于人的"嘴巴"和"耳朵" 發射端…

獵豹移動(Cheetah Mobile)

本文來自騰訊元寶 公司背景與發展歷程 ?成立與早期定位 獵豹移動成立于2010年11月&#xff0c;由金山安全與可牛影像合并而成&#xff0c;初期以移動安全工具和清理軟件為核心業務。其明星產品包括《獵豹清理大師》&#xff08;Clean Master&#xff09;和《獵豹瀏覽器》&…

go的gmp

參考鏈接&#xff1a;https://www.bilibili.com/video/BV19r4y1w7Nx Golang的GMP調度模型(協程調度器)是其并發編程的核心。GMP代表Goroutine、Machine和Processor三個關鍵組成部分。Goroutine是Go語言中的輕量級線程&#xff0c;Machine是操作系統的線程&#xff0c;Processor…

Vue3-高級特性

一、Vue中自定義指令 1.認識自定義指令 在Vue的模板語法中我們學習過各種各樣的指令&#xff1a;v-show、v-for、v-model等等&#xff0c;除了使用這些指令之外&#xff0c;Vue也允許我們來 自定義自己的指令。 注意&#xff1a;在Vue中&#xff0c;代碼的復用和抽象主要還是…

【量化策略】動量突破策略

【量化策略】動量突破策略 &#x1f680;量化軟件開通 &#x1f680;量化實戰教程 技術背景與應用場景 動量突破策略是一種基于市場趨勢的量化交易策略&#xff0c;它通過識別資產價格的動量變化來預測未來的價格走勢。這種策略適用于那些價格波動較大、趨勢明顯的市場環境…