學習基于springboot秒殺系統-環境配置(接口封裝,mybatis,mysql,redis(Linux))

文章目錄

  • 前言
  • 創建springboot項目
  • 封裝controller層輸入輸出
    • rest api 的json輸出
    • 返回頁面
  • 集成mybatis
  • 集成redis
    • 下載虛擬機和centos
    • 下載redis.tar.gz
    • 上傳redis.tar.gz 到虛擬機

前言

今天開始記錄學習秒殺系統-課程是基于慕課上的搜索秒殺系統的課程,老師講解非常好。這系列的筆記更多可能會記錄我學習的疑問點和遇到的問題,一些環境配置并沒有系統的介紹。環境配置有問題可以單獨搜索相關

創建springboot項目

我用的是idea2024專業版,創建springboot項目非常方便。最大的問題可能是怎樣下載專業版(大家自行百度)
項目創建完成后 我們創建以下包和目錄
在這里插入圖片描述
這里說明以下為什么要在org.example.miaosha_1創建包 因為springboot掃描bean的路徑已經不用xml配置了,所以掃描路徑必須規定好要在啟動程序同級或者下級。

創建完后我們直接進入正題配置以下依賴

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-thymeleaf</artifactId></dependency>

封裝controller層輸入輸出

controller 里邊的方法根據返回類型分為兩大類 1.返回json 2.返回頁面 。對于兩種不同的信息,我們要對其封裝。為什么封裝?因為不封裝會顯得很亂格式各樣的數據都有,我們需要集中把返回信息定義在一個類中。其實最繁瑣的就是第一類。

rest api 的json輸出

一般服務端會給客戶端做接口的約定
什么樣子呢{"code": 錯誤碼 "msg":錯誤信息 "data":成功時返回的數據 }
所以在根目錄下創建一個包result,在創建一個Result類 封裝輸入輸出結果。定義好后,我們發現在controller層需要寫很多凌亂的代碼 比如對于每個錯誤信息我們都需要在這里定義,然后調用Result構造函數。其實沒什么問題,但是很難看,因為我們錯誤信息很多啊比如各種驗證,各種訪問策略。假如都寫在controller,就會顯得本末倒置,也讓錯誤信息滿天飛,一會定義一個一會定義一個。

public class Result<T> {private int code;private String msg;private T data;private Result(CodeMsg codeMsg) {this.code = codeMsg.getCode();this.msg = codeMsg.getMsg();}public static <T> Result<T> success(T data) {return new Result<T>(data);}public static <T>Result<T> error(CodeMsg codeMsg) {return new Result<T>(codeMsg);}private Result(T data) {this.data = data;this.code = 0;this.msg = "success";}public int getCode() {return code;}public void setCode(int code) {this.code = code;}public String getMsg() {return msg;}public void setMsg(String msg) {this.msg = msg;}public T getData() {return data;}public void setData(T data) {this.data = data;}public Result(int code, String msg, T data) {this.code = code;this.msg = msg;this.data = data;}
}

這里記錄一下我多年的疑問1.為什么要讓構造方法成為private方法 ,不能變為public嗎 。這是因為我們外部用此對象時 我們只能success和error去調用構造函數 防止很混亂。
2.為什么這兩種方法要設置static方式呢 ,static方式的作用是讓此方法變為這個類的,而不是這個對象的。注意對象和類有本質區別,對象是new出來的。我們不加static的話每次用都需要先new 一個對象然后使用此方法。 而加了之后我們直接使用即可
比如

Tool tool = new Tool(); // 必須先 new
tool.sayHi();           // 然后才能調用Tool.sayHello(); // 直接通過類名調用!不需要 new!

此外 由于構造器設置了private你沒法通過new 來初始化。

再在此目錄下創建一個類

package org.example.miaosha_1.result;public class CodeMsg {private int code;private String msg;//通用異常public static CodeMsg SUCCESS = new CodeMsg(0, "success");public static CodeMsg ERROR = new CodeMsg(1, "error");//登錄模塊5002XX//商品模塊//訂單模塊//訂單模塊 5005XXpublic CodeMsg(int code, String msg) {this.code = code;this.msg = msg;}public int getCode() {return code;}public void setCode(int code) {this.code = code;}public String getMsg() {return msg;}public void setMsg(String msg) {this.msg = msg;}
}

這樣我們的錯誤信息可以只在CodeMsg類下定義了。代碼更優雅

返回頁面

(1)配置 在applications.properties文件下,輸入

spring.thymeleaf.cache=false
spring.thymeleaf.content-type=text/html
spring.thymeleaf.enabled=true
spring.thymeleaf.encoding=UTF-8
spring.thymeleaf.mode=HTML5
spring.thymeleaf.prefix=classpath:/templates/
spring.thymeleaf.suffix=.html

其中后兩行的含義是當我們在controller層,想要返回頁面時,我們只需返回一個字符串。隨后在resources 目錄下新建templates文件夾,在此文件下創建對應的html文件 ,我們就可以返回。比如在controller層方法如下

    @RequestMapping("/theymeleaf")public String theymeleaf(Model model){return "hello";}

我們需要“在resources 目錄下新建templates文件夾,在此文件下創建hello.html文件 ” 。

<!DOCTYPE HTML>
<html xmlns:th="http://www.thymeleaf.org">
<head><title>hello</title><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
</head>
<body>
<p th:text="'hello:'+${name}" ></p>
</body>
</html>

文件復制以上內容。 其中th代表一個別名,th 是這個命名空間的前綴,用于標識與Thymeleaf相關的屬性和指令。可以理解為沒有th的塊,你用不了thymeleaf。 比如我們在

p標簽用了 th,我們就可以使用在后臺屬性注入。修改后的contraoller方法時
  @RequestMapping("/theymeleaf")public String theymeleaf(Model model){model.addAttribute("name","Bendong");return "hello";}

**可能的問題:**這里記錄一個問題 假如你在controller方法類前邊加的是RestController 注解你使用了 @RestController 而不是 @Controller
@RestController = @Controller + @ResponseBody
所以哪怕你沒加 @ResponseBody,它自動加了!
于是返回的 “hello” 被當作純字符串響應給瀏覽器了,而不是視圖名。 所以要想返回視圖名字直接加 controller

集成mybatis

首先 配置依賴

<dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>1.3.1</version></dependency>

在打開applications.properties配置

mybatis.type-aliases-package=org.example.miaosha_1.domains
mybatis.configuration.map-underscore-to-camel-case=true
mybatis.configuration.default-fetch-size=100
mybatis.configuration.default-statement-timeout=3000
mybatis.mapperLocations = classpath:org/example/miaosha_1/dao/*.xml

配置說明:第一行代表,你數據庫表中對應的等值對象
第二行:將下劃線轉化為駝峰
三四行不用管
第五行代表,用配置文件查詢時去哪掃描

這里稍微解釋一下第一行,其實它的作用是讓 MyBatis 自動掃描 org.example.miaosha_1.domains 包下的所有類,并為每個類注冊一個 類型別名(Type Alias)。注冊別名后,在你的 XML 映射文件(如 UserMapper.xml)中就可以使用簡短的類名來表示 Java 類型,而不需要寫完整的包名。例如:

<!-- 不用別名寫法 -->
<resultMap id="userMap" type="org.example.miaosha_1.domains.User"><!-- 用了別名后 -->
<resultMap id="userMap" type="User">

隨后配置mysql,這里注意一定要和自己電腦下載的mysql server的版本一致 一般是8和5,我用的8。
還是一樣的配置依賴

    <dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.14</version></dependency><dependency><groupId>com.alibaba</groupId><artifactId>druid</artifactId><version>1.1.10</version></dependency>

配置applications.properties

spring.datasource.url=jdbc:mysql://127.0.0.1:3306/miaoshademo?useUnicode=true&characterEncoding=utf-8&allowMultiQueries=true&useSSL=false&serverTimezone=GMT%2B8
spring.datasource.username=root
spring.datasource.password=123456
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
spring.datasource.filters=stat
spring.datasource.maxActive=2
spring.datasource.initialSize=1
spring.datasource.maxWait=60000
spring.datasource.minIdle=1
spring.datasource.timeBetweenEvictionRunsMillis=60000
spring.datasource.minEvictableIdleTimeMillis=300000
spring.datasource.validationQuery=select 'x'
spring.datasource.testWhileIdle=true
spring.datasource.testOnBorrow=false
spring.datasource.testOnReturn=false
spring.datasource.poolPreparedStatements=true
spring.datasource.maxOpenPreparedStatements=20

前三行換成自己電腦的配置,隨后自行測試有沒有成功。如果版本是5第三行去掉cj

集成redis

下載虛擬機和centos

詳情右轉至 VMware-workstation安裝教程–超詳細(附帶安裝包)附帶安裝CentOS系統教程

下載redis.tar.gz

這里直接附上鏈接 https://pan.baidu.com/s/15zRDtzgB1_sSZYDhxhzXTg 提取碼 blwy

上傳redis.tar.gz 到虛擬機

我用的較為簡單的方式 即共享文件夾
在這里插入圖片描述

打開虛擬機設置 點擊選項
在這里插入圖片描述
添加 選擇你安裝redis安裝包的文件夾
進入虛擬機 打開終端輸入命令 cd /mnt/hgfs ls
查看是否共享成功
在這里插入圖片描述
輸入命令 tar -zvxf redis-6.2.1.tar.gz 解壓后
分別輸入以下命令 1.切換到root(升級權限) 2.移動文件夾
在這里插入圖片描述
切換到 /usr/local/redis
直接編譯 輸入make(這一步可能會失敗,因為你沒有安裝gcc編譯環境)
安裝gcc編譯環境 yum -y install gcc automake autoconf libtool make
還有可能失敗 ,因為你沒的虛擬機不能訪問網絡 具體去搜一下吧
編譯完成后
輸入 vi redis.conf
在這里插入圖片描述
注意進入你想要修改 則進入編輯模式 按i ,進入命令模式 按esc 默認是esc
然后輸入:/bind 這句代碼是查找bind的位置 ,然后改為0.0.0.0 就是所有主機都可以訪問
在這里插入圖片描述

退出編輯模式 輸入:/dae 將no改為yes

隨后配置好后 導入依賴

redis.clients
jedis


com.alibaba
fastjson
1.2.38

配置linux的主機
redis.host=xxxxxx
redis.port=6379
redis.timeout=3
redis.password=123456
redis.poolMaxTotal=10
redis.poolMaxIdle=10
redis.poolMaxWait=3
隨后環境配置完成,然后自行測試一下。

如果覺得繁瑣可以直接用windows安裝的redis,前邊也用不到很多。

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

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

相關文章

stm32達到什么程度叫精通?

STM32達到什么程度叫精通&#xff1f;一個十年老兵的深度反思 前言&#xff1a;精通二字&#xff0c;重如泰山 每次有人問我"STM32達到什么程度叫精通"這個問題&#xff0c;我都會沉默很久。 不是因為這個問題難回答&#xff0c;而是因為"精通"這兩個字太重…

微軟上線Deep Research:OpenAI同款智能體,o3+必應雙王炸

今天凌晨&#xff0c;微軟在官網宣布&#xff0c;Azure AI Foundry中上線Deep Research公開預覽版。這是支持API和SDK的OpenAI 高級智能體研究能力產品&#xff0c;并且Azure 的企業級智能體平臺完全集成。Deep Research是OpenAI在今年4月25日發布的最新產品&#xff0c;能夠像…

Spring Batch終極指南:原理、實戰與性能優化

&#x1f31f; Spring Batch終極指南&#xff1a;原理、實戰與性能優化單機日處理10億數據&#xff1f;揭秘企業級批處理架構的核心引擎&#xff01;一、Spring Batch 究竟是什么&#xff1f;Spring batch是用于創建批處理應用程序&#xff08;執行一系列作業&#xff09;的開源…

【Part 3 Unity VR眼鏡端播放器開發與優化】第四節|高分辨率VR全景視頻播放性能優化

文章目錄《VR 360全景視頻開發》專欄Part 3&#xff5c;Unity VR眼鏡端播放器開發與優化第一節&#xff5c;基于Unity的360全景視頻播放實現方案第二節&#xff5c;VR眼鏡端的開發適配與交互設計第三節&#xff5c;Unity?VR手勢交互開發與深度優化第四節&#xff5c;高分辨率V…

TCP/IP協議基礎

TCPIP協議基礎 網絡模型 -OSI參考模型 -OSI參考模型各層功能 -TCP/IP網絡模型 -TCP/IP協議棧OSI參考模型 – 為了解決網絡設備之間的兼容性問題&#xff0c;國際標準化組織ISO于1984年提出了OSI RM&#xff08;開放系統互連參考模型&#xff09;。 OSI參考模型一共有七層&#…

【Nginx】Nginx代理WebSocket

1.websocketWebSocket 是一種網絡通信協議&#xff0c;它提供了在單個 TCP 連接上進行全雙工&#xff08;雙向&#xff09;通信的能力假設需求&#xff1a;把 ws://192.168.0.1:8088/ws-api/websocket/pushData代理到ws://192.168.0.156:8888/websocket/pushData&#xff1b;同…

Spring AI Alibaba Graph使用案例人類反饋

1、Spring AI Alibaba Graph 是社區核心實現之一&#xff0c;也是整個框架在設計理念上區別于 Spring AI 只做底層原子抽象的地方&#xff0c;Spring AI Alibaba 期望幫助開發者更容易的構建智能體應用。基于 Graph 開發者可以構建工作流、多智能體應用。Spring AI Alibaba Gra…

本地部署jenkins持續集成

一、準備環境&#xff08;jdk版本跟Tomcat版本要匹配&#xff09; java jdk 環境(版本是11.0.21) jenkins war包(版本是2.440.3) Tomcat (版本是 9.0.84) 二、安裝步驟 1、安裝jdk環境 1&#xff09;先安裝java環境&#xff0c;安裝完成后配置環境變量&#xff0c;參考上…

基于Java+Maven+Testng+Selenium+Log4j+Allure+Jenkins搭建一個WebUI自動化框架(1)搭建框架基本雛形

本次框架使用Maven作為代碼構建管理&#xff0c;引用了PO模式&#xff0c;將整體的代碼分成了頁面層、用例層、業務邏輯層。框架搭建流程&#xff1a;1、在pom.xml中引入依賴&#xff1a;<!-- https://mvnrepository.com/artifact/io.appium/java-client --> <depende…

從零構建MCP服務器:FastMCP實戰指南

引言&#xff1a;MCP協議與FastMCP框架 Model Context Protocol&#xff08;MCP&#xff09;是連接AI模型與外部服務的標準化協議&#xff0c;允許LLM&#xff08;如Claude、Gemini&#xff09;調用工具、訪問數據。然而&#xff0c;直接實現MCP協議需要處理JSON-RPC、會話管理…

基于FPGA的智能小車設計(包含代碼)/ 全棧FPGA智能小車:Verilog實現藍牙/語音/多傳感器融合的移動平臺

首先先聲明一下&#xff0c;本項目已經歷多輪測試&#xff0c;可以放心根據我的設計進行二次開發和直接套用&#xff01;&#xff01;&#xff01; 代碼有詳細的注釋&#xff0c;方便同學進行學習&#xff01;&#xff01; 制作不易&#xff0c;記得三連哦&#xff0c;給我動…

Object.defineProperties 詳解

Object.defineProperties 詳解 Object.defineProperties 是 JavaScript 中用于在一個對象上定義或修改多個屬性的方法。它是 Object.defineProperty 的復數版本&#xff0c;允許你一次性定義多個屬性。 基本語法 Object.defineProperties(obj, props)obj&#xff1a;要在其上定…

MyBatis-Plus:深入探索與最佳實踐

MyBatis-Plus作為MyBatis的增強版&#xff0c;已經在Java開發中得到了廣泛應用。它不僅繼承了MyBatis的所有功能&#xff0c;還提供了許多強大的擴展功能&#xff0c;幫助開發者提升開發效率和代碼質量。本文將深入探討MyBatis-Plus的高級特性及其在實際項目中的最佳實踐。一、…

勞斯萊斯數字孿生技術:重構航空發動機運維的綠色革命

在航空工業邁向智能化的浪潮中&#xff0c;勞斯萊斯以數字孿生技術為核心&#xff0c;構建了發動機全生命周期管理的創新范式。這項技術不僅重新定義了航空發動機的維護策略&#xff0c;更通過數據驅動的決策體系&#xff0c;實現了運營效率與生態效益的雙重突破。本文將從技術…

NPM組件 querypilot 等竊取主機敏感信息

【高危】NPM組件 querypilot 等竊取主機敏感信息 漏洞描述 當用戶安裝受影響版本的 querypilot 等NPM組件包時會竊取用戶的主機名、用戶名、工作目錄、IP地址等信息并發送到攻擊者可控的服務器地址。 MPS編號MPS-2kgq-v17b處置建議強烈建議修復發現時間2025-07-05投毒倉庫np…

創業商業融資計劃書PPT模版

創業商業融資計劃書PPT模版&#xff1a;https://pan.quark.cn/s/25a043e4339e

解決GitHub倉庫推送子文件夾后打不開的問題

從你描述的情況來看&#xff0c;IELTS_AI_Assessment 很可能被識別為了 Git 子模塊&#xff08;submodule&#xff09;&#xff0c;而不是普通文件夾&#xff0c;這會導致在 GitHub 上無法直接打開查看內容。以下是具體原因和解決辦法&#xff1a;為什么文件夾無法打開&#xf…

Web后端開發-請求響應

文章目錄概述請求Postman簡單參數原始方式SpringBootRequestParam注解小結實體參數數組集合參數日期參數Json參數路徑參數總結響應響應-案例概述 請求 Postman 簡單參數 原始方式 // 1. 簡單參數 // 原始方式RequestMapping("/simpleParam")public String …

Javascript基礎內容回顧—變量提升、事件循環和閉包等內容

以下是前端面試中 JavaScript 基礎易錯問題的詳解&#xff0c;結合常見考點和易混淆概念進行解析&#xff1a; ?? 一、變量作用域與提升 var vs let/const ? 變量提升&#xff1a;var 聲明的變量會提升到作用域頂部&#xff08;值為 undefined&#xff09;&#xff0c;而 …