Spring Boot與Mybatis-Plus集成SQLServer的完整指南

本文還有配套的精品資源,點擊獲取 menu-r.4af5f7ec.gif

簡介:本項目旨在演示如何將SQLServer與Spring Boot以及Mybatis-Plus框架進行整合,打造一個高效穩定的后端服務。詳細介紹涉及了數據庫連接、實體類定義、Mapper接口創建、Service層業務邏輯編寫、Controller層API處理,以及運行測試等關鍵步驟。項目的核心知識點包括JDBC事務管理、Mybatis-Plus動態SQL、分頁查詢、數據庫優化、異常處理、安全控制等,為開發者提供了一個深入理解數據庫操作層構建的實踐案例。
sqlserver-demo:Spring Boot + Mybatis-Plus + SQLServer

1. SQL Server數據庫介紹

1.1 SQL Server概覽

SQL Server是微軟開發的一種關系型數據庫管理系統(RDBMS),以其高性能、可擴展性和安全性而著稱。它廣泛應用于企業級應用中,支持大數據量的存儲,并且能夠處理復雜的事務需求。

1.2 版本與特性

SQL Server提供多個版本,包括免費的Express版,標準版,企業版等,各有不同的功能和性能特點。每個版本都包含一些核心特性,如高效的數據存儲、備份和恢復功能、以及內置的安全機制。

1.3 SQL Server的安裝與配置

安裝SQL Server之前,需要確保系統滿足最低硬件要求,并下載合適的版本。安裝過程中,系統會提示進行初始化配置,包括設置實例名稱、選擇認證模式(Windows認證或混合認證模式)、配置服務賬戶以及定義排序規則等。

graph LR
A[開始安裝SQL Server] --> B[選擇安裝類型]
B --> C[系統檢查]
C --> D[輸入產品密鑰]
D --> E[實例配置]
E --> F[服務賬戶配置]
F --> G[排序規則配置]
G --> H[完成安裝]

在配置過程中,建議根據實際應用場景選擇適當的選項,確保數據庫的最佳運行狀態。安裝完成后,通常需要配置數據庫的連接信息,并進行基本的性能優化,以保證系統的穩定性和高效性。

隨著數據庫的搭建與配置完成,接下來將介紹Spring Boot與Mybatis-Plus的特性及其在應用開發中的作用,從而深入理解后端開發的技術細節與實踐。

2. Spring Boot框架特性與Mybatis-Plus框架介紹

2.1 Spring Boot框架的核心特性

2.1.1 起步依賴與自動配置

Spring Boot 的設計哲學之一是簡化項目初始化和配置過程,這一目標通過所謂的“起步依賴”(Starters)與“自動配置”(Auto-configuration)得以實現。起步依賴是一組便捷的依賴描述符,它們能夠以最小的配置來引導項目所需的相關庫。開發者無需手動添加所有依賴,而是通過引入一個起步依賴,Spring Boot 將自動為你添加其他相關依賴。

例如,引入 Spring Web 的起步依賴后,Spring Boot 會自動配置嵌入式 Tomcat,并設置好 Spring MVC 的默認配置。這是因為在底層,Spring Boot 通過依賴的傳遞性,引入了 spring-boot-starter-web 的所有傳遞依賴,包含了項目需要的大部分基礎組件。

自動配置的原理

自動配置是基于項目的類路徑下存在特定的 jar 包,并且項目中沒有定義某些特定的配置類時,Spring Boot 會自動配置相應的 Bean。這是通過 @EnableAutoConfiguration 注解來實現的,它本身是一個復合注解,背后利用了 @AutoConfigurationPackage @Import(AutoConfigurationImportSelector.class) 實現。 AutoConfigurationImportSelector 會將候選的自動配置類導入,這些候選類是在 spring.factories 文件中定義的。

// 使用 @EnableAutoConfiguration 開啟自動配置
// @SpringBootApplication 等價于同時使用 @Configuration, @EnableAutoConfiguration, @ComponentScan
@SpringBootApplication
public class MyApplication {public static void main(String[] args) {SpringApplication.run(MyApplication.class, args);}
}

通過這個簡單的例子可以看出,我們無需進行復雜的配置,Spring Boot 就已經為我們設置了默認的配置。這種自動化的設計使得開發者能夠更專注于業務邏輯的實現,而不是環境配置的工作。

2.1.2 內嵌Web服務器與應用部署

Spring Boot 允許開發者在應用中嵌入 Web 服務器,常見的有 Tomcat、Jetty、Undertow。Spring Boot 應用啟動時,內嵌的服務器也隨之啟動,無需額外的部署步驟。當應用打包成 JAR 文件時,它實際上成為了一個可執行的 JAR 文件,這意味著應用服務器不再是一個單獨的進程。

內嵌服務器的工作原理

在內部,Spring Boot 使用了一個名為 spring-boot-starter-tomcat 的起步依賴,它包含了 Tomcat 的庫。如果你想要切換到其他的服務器,只需要替換對應的起步依賴即可。例如,你可以將 spring-boot-starter-tomcat 替換為 spring-boot-starter-undertow

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId><exclusions><exclusion><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-tomcat</artifactId></exclusion></exclusions>
</dependency>
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-undertow</artifactId>
</dependency>

通過上述代碼,我們排除了 Tomcat 并引入了 Undertow。Spring Boot 會自動識別這種變更,并內嵌 Undertow 服務器。

應用部署

在內嵌服務器模式下,部署變得極為簡單。開發者僅需要將構建好的 JAR 文件發送到生產環境,并通過下面的命令啟動即可:

java -jar your-application.jar

Spring Boot 應用可以設置為后臺守護進程運行,通過添加 --server.port=8080 參數,還可以指定服務器運行的端口。這樣的部署模型簡化了應用的分發和部署,使得持續部署和微服務架構的實施更加容易。

2.2 Mybatis-Plus框架的優勢與功能

2.2.1 Mybatis-Plus的基本原理與組件

Mybatis-Plus 是一個在 Mybatis 基礎上擴展出來的框架,它提供了一些自動化的配置和代碼生成工具,極大地簡化了 CRUD 操作和數據庫交互的復雜性。Mybatis-Plus 最主要的特點之一是,它提供了一個通用的 Mapper,該 Mapper 包含了對數據庫表的基本操作方法。

基本原理

Mybatis-Plus 基于 Mybatis,保留了 Mybatis 的動態 SQL、插件體系等核心功能。它通過增強 Mapper 接口,實現了無侵入式的 CRUD 操作,即使在自定義 SQL 時,也無需編寫額外的 Mapper XML 文件。

Mybatis-Plus 的主要組件包括:

  • 通用 Mapper :提供了一套豐富的通用方法,如 selectById insert update delete 等。
  • 代碼生成器 :能夠根據數據庫表結構自動生成對應的 Mapper、Entity、Service、Controller 等代碼。
  • 邏輯刪除 :在數據庫層面進行數據的軟刪除,即刪除操作實際上是更新操作,將一個特定字段(如 is_deleted )設置為某個值(通常是 1)表示刪除。
// 示例:通用 Mapper 的使用
public interface UserMapper extends BaseMapper<User> {// 這里繼承了 BaseMapper,BaseMapper 已經提供了很多默認的 CRUD 方法
}
組件工作原理

通用 Mapper 的工作原理是通過定義一些通用的 SQL 模板和方法,配合 Mybatis 的注解或者 XML 來實現具體的 SQL 映射。當開發者調用這些方法時,Mybatis-Plus 會根據這些通用的模板生成對應數據庫表的 SQL 語句。

代碼生成器則利用了 Mybatis-Plus 提供的模板引擎,根據數據庫表結構自動生成實體類、Mapper 接口和 XML 文件等。這極大地減少了重復的編碼工作,提高了開發效率。

2.2.2 增強特性:代碼生成器、邏輯刪除等

Mybatis-Plus 提供了增強特性,使得開發者能夠更高效地開發基于 Mybatis 的應用程序。這些特性包括代碼生成器、邏輯刪除、分頁插件、樂觀鎖機制等。

代碼生成器

代碼生成器能夠根據數據庫表結構自動生成代碼,大大減少了代碼編寫和維護的工作量。開發者只需要簡單配置,就可以生成包含 CRUD 操作的實體類、Mapper 接口和 XML 文件等。

// 代碼生成器的簡單示例
public class CodeGenerator {public static void main(String[] args) {// 配置數據源、生成器等參數// ...// 執行生成操作mpg.execute();}
}
邏輯刪除

邏輯刪除是通過在數據庫中設置一個標志字段來表示數據是否邏輯上刪除,而非物理刪除。這樣做的好處是數據的安全性和完整性得到了保證,并且可以通過查詢條件輕松過濾出未被刪除的數據。

// 邏輯刪除的實體類屬性
public class User {private Long id;private String name;private Integer age;// 邏輯刪除字段private Integer isDeleted;// getters and setters
}

在 Mybatis-Plus 的 Mapper 中,可以使用 @TableLogic 注解來標記邏輯刪除字段:

public interface UserMapper extends BaseMapper<User> {// 使用 BaseMapper 已有的邏輯刪除方法,如 deleteById
}

當調用刪除方法時,Mybatis-Plus 并不會執行物理刪除,而是將 isDeleted 字段的值更新為 1,這樣查詢時就會自動忽略這些記錄。

通過這些增強特性,Mybatis-Plus 提升了開發效率和數據庫操作的安全性,同時保證了靈活性和擴展性,適用于多種復雜場景。

3. 整合Spring Boot與Mybatis-Plus

3.1 數據庫連接配置

3.1.1 連接池的配置與優化

在開發中,數據庫連接池(Connection Pool)是一個關鍵組件,它能夠幫助我們高效地管理數據庫連接資源。使用連接池可以避免頻繁地打開和關閉數據庫連接,這樣可以顯著提高應用程序的性能。在Spring Boot中,連接池的配置和優化對于數據庫的性能發揮至關重要。

Spring Boot默認使用HikariCP作為連接池組件,它是一個高性能的Java連接池。配置HikariCP很簡單,只需要在 application.properties 文件中設置相關的參數即可。

# 設置連接池數據源
spring.datasource.type=com.zaxxer.hikari.HikariDataSource# HikariCP相關配置
spring.datasource.hikari.connectionTimeout=30000 # 連接超時時間(毫秒)
spring.datasource.hikari.maximumPoolSize=10 # 最大連接池數量
spring.datasource.hikari.poolName=MyHikariCP # 連接池名稱
spring.datasource.hikari.idleTimeout=600000 # 空閑連接超時時間(毫秒)
spring.datasource.hikari.maxLifetime=1800000 # 連接存活時間(毫秒)

優化連接池配置通常涉及以下參數:

  • connectionTimeout : 連接獲取超時時間。
  • maximumPoolSize : 連接池最大連接數。
  • idleTimeout : 連接空閑超時時間。
  • maxLifetime : 連接最大存活時間。

這些參數需要根據實際的應用負載和硬件資源來調整。例如,如果應用需要處理大量的并發請求,可能需要增加 maximumPoolSize 來保證足夠多的連接。而 idleTimeout maxLifetime 則需要根據數據庫服務器的性能進行調整,避免創建過多的長生命周期連接。

3.1.2 數據源的選擇與配置

在整合Spring Boot與Mybatis-Plus時,選擇合適的數據源是至關重要的一步。Spring Boot支持多種數據源,如HikariCP、Apache DBCP等,其中HikariCP因其輕量和高性能而被廣泛使用。

數據源的配置與Spring Boot版本有關。以Spring Boot 2.x為例,配置數據源的步驟如下:

# 數據源JDBC URL
spring.datasource.url=jdbc:mysql://localhost:3306/your_database# 數據庫用戶名
spring.datasource.username=root# 數據庫密碼
spring.datasource.password=your_password# 數據源類型
spring.datasource.type=com.zaxxer.hikari.HikariDataSource

同時,Mybatis-Plus也提供了數據源的配置方式。例如,在 application.properties 文件中可以設置如下配置,以適應Mybatis-Plus的配置需求:

# Mybatis-Plus配置
mybatis-plus.mapper-locations=classpath:/mapper/**/*.xml
mybatis-plus.type-aliases-package=com.yourpackage.entity
mybatis-plus.global-config.db-config.id-type=auto

在這部分配置中, mapper-locations 指定了Mybatis的Mapper XML文件位置, type-aliases-package 指定了實體類的包路徑,而 global-config.db-config.id-type=auto 則設置了主鍵自動生成策略為自動增長。

3.2 實體類(Entity)定義與Mapper接口(Mapper)創建

3.2.1 實體類的定義與字段映射

在使用Mybatis-Plus框架中,實體類(Entity)是數據模型的映射,每一個數據庫表都對應一個實體類。定義實體類時,需要遵循一些基本的約定:

  • 類名通常與表名相同或者相似。
  • 屬性名與字段名相同。
  • 使用注解 @TableId 來標注主鍵字段。
  • 使用 @TableField 來標注普通字段。

下面是一個簡單的實體類定義示例:

import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.annotation.TableField;@TableName("user")
public class User {@TableId(type = IdType.AUTO)private Long id;@TableField("username")private String username;@TableField("password")private String password;// Getters and Setters...
}

在上述代碼中, @TableName("user") 注解指明該實體類對應數據庫中的 user 表。 @TableId 指定了主鍵字段, id 字段被設置為自增(AUTO)。每個字段使用 @TableField 注解進行映射,這樣Mybatis-Plus在執行數據庫操作時可以正確地處理字段。

3.2.2 Mapper接口的創建與繼承體系

Mapper接口是Mybatis-Plus框架中用于操作數據庫的核心接口。在創建Mapper接口時,通常不需要編寫任何實現代碼,只需要繼承 BaseMapper 接口即可獲得基本的CRUD(Create, Read, Update, Delete)操作能力。

下面是一個Mapper接口的示例:

import com.baomidou.mybatisplus.core.mapper.BaseMapper;public interface UserMapper extends BaseMapper<User> {// 這里可以定義一些特殊的數據庫操作方法
}

BaseMapper 提供了對 User 實體的基本操作,如 selectById insert update delete 等。在實際的應用中,如果需要進行更復雜的數據庫操作,可以在Mapper接口中添加自定義的方法,并編寫相應的XML文件或者使用注解來實現。

為了支持這些操作,Mybatis-Plus通常需要一個對應的XML文件,其中包含SQL語句:

<?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.yourpackage.mapper.UserMapper"><select id="selectByUsername" resultType="com.yourpackage.entity.User">SELECT * FROM user WHERE username = #{username}</select></mapper>

在上述XML文件中,定義了一個 selectByUsername 的查詢操作,該操作可以根據用戶名查詢用戶信息。使用這種方式可以非常靈活地編寫各種復雜的查詢。

至此,我們完成了實體類的定義以及Mapper接口的創建。在后續章節中,我們將繼續深入了解如何通過Service層實現具體的業務邏輯,以及如何編寫Controller層的API來響應外部請求。

4. 業務邏輯實現與API編寫

在構建Web應用時,業務邏輯層(Service層)和表現層(Controller層)的實現是至關重要的環節。Service層負責業務規則的實現,而Controller層則關注于如何接收用戶請求、調用Service層處理邏輯,并將結果以適當的格式返回給用戶。在Spring Boot和Mybatis-Plus的整合下,這個過程可以變得更為高效。

4.1 Service層業務邏輯實現

Service層作為應用的核心層,它封裝了業務的處理邏輯。這一層通常包含了業務接口的定義以及接口的實現類。

4.1.1 Service接口定義與實現類編寫

在定義Service層接口時,我們應該遵循單一職責原則,即一個接口只負責一個業務功能。接口定義了哪些方法需要被實現,而實現類則負責具體的邏輯處理。

//UserService.java
public interface UserService {User getUserById(Long id);boolean createUser(User user);boolean updateUser(User user);boolean deleteUser(Long id);
}
//UserServiceImpl.java
@Service
public class UserServiceImpl implements UserService {@Autowiredprivate UserMapper userMapper;@Overridepublic User getUserById(Long id) {return userMapper.selectById(id);}@Overridepublic boolean createUser(User user) {return userMapper.insert(user) > 0;}@Overridepublic boolean updateUser(User user) {return userMapper.updateById(user) > 0;}@Overridepublic boolean deleteUser(Long id) {return userMapper.deleteById(id) > 0;}
}

以上代碼中, UserService 定義了用戶的增刪改查方法,而 UserServiceImpl 作為實現類,注入了 UserMapper 接口,利用Mybatis-Plus提供的方法完成數據庫操作。同時,這些方法返回的布爾值可以表示操作的成功與否。

4.1.2 業務邏輯的封裝與事務管理

封裝業務邏輯時,我們還需要考慮到事務管理。在Spring框架中,可以通過 @Transactional 注解來聲明事務邊界。

//UserService.java
@Transaction
public boolean createUser(User user) {// 檢查用戶名是否唯一等邏輯boolean isUnique = checkUsernameUnique(user.getUsername());if (isUnique) {return userMapper.insert(user) > 0;}return false;
}

在上述示例中, createUser 方法在創建用戶之前會檢查用戶名是否唯一,如果用戶創建成功,返回true,如果檢查不通過,返回false。 @Transactional 注解確保了操作的原子性,如果在檢查用戶名唯一性的過程中發生異常,整個事務會被回滾。

4.2 Controller層API編寫

Controller層的作用是接收外部請求,并調用Service層的方法處理這些請求,然后返回響應。Spring Boot的RESTController注解可以幫助我們快速實現RESTful API。

4.2.1 RESTful接口設計原則

RESTful接口設計遵循一些原則,比如使用HTTP方法(GET、POST、PUT、DELETE)來表示對資源的操作,使用URI來表示資源。以下是一個簡單的例子:

@RestController
@RequestMapping("/users")
public class UserController {@Autowiredprivate UserService userService;@GetMapping("/{id}")public ResponseEntity<User> getUser(@PathVariable Long id) {User user = userService.getUserById(id);if (user == null) {return new ResponseEntity<>(HttpStatus.NOT_FOUND);}return new ResponseEntity<>(user, HttpStatus.OK);}@PostMappingpublic ResponseEntity<User> createUser(@RequestBody User user) {boolean result = userService.createUser(user);if (result) {return new ResponseEntity<>(user, HttpStatus.CREATED);}return new ResponseEntity<>(HttpStatus.INTERNAL_SERVER_ERROR);}// 其他方法省略...
}

UserController 中,我們定義了獲取用戶(GET)和創建用戶(POST)的方法。通過 @RequestBody 注解,我們能夠直接從請求體中將JSON數據映射到User對象。通過 @PathVariable 注解,我們可以從URL路徑中獲取動態參數。

4.2.2 請求參數處理與響應格式設計

請求參數的處理需要注意數據校驗和格式化。對于復雜的參數結構,可以使用DTO(Data Transfer Object)來傳輸數據。而響應格式設計則需要考慮如何返回正確狀態碼以及數據結構。

// UserDTO.java
public class UserDTO {// 數據字段
}// UserController.java
@PostMapping("/register")
public ResponseEntity<?> registerUser(@RequestBody UserDTO userDTO) {// 校驗和轉換邏輯User user = convertDTOToUser(userDTO);boolean result = userService.createUser(user);if (result) {return new ResponseEntity<>(user, HttpStatus.CREATED);}// 定制錯誤響應return ResponseEntity.badRequest().body("Error: User creation failed");
}

在上述代碼中, UserDTO 用于傳遞注冊信息, registerUser 方法實現了從DTO到User實體的轉換,并調用了 createUser 方法。如果用戶創建成功,則返回狀態碼201和用戶信息,否則返回錯誤響應。

以上就是業務邏輯實現與API編寫的詳盡內容。在實際的項目中,這兩層的實現細節會更加復雜,但是掌握上述的基本原則和實踐是構建高質量Web服務的基礎。

5. 性能優化與安全集成

隨著應用的逐漸復雜和用戶量的增長,性能優化和安全集成變得越來越重要。本章節我們將探討如何對數據庫進行設計優化,實現異常的有效管理,并集成安全控制來保護應用。

5.1 數據庫設計與性能優化

5.1.1 關系型數據庫規范化設計

規范化是數據庫設計的重要過程,它通過消除冗余數據和依賴關系來提高數據的完整性。在進行規范化時,需要按照范式理論逐步進行:

  • 第一范式(1NF):要求表中的每個字段都是不可分割的基本數據項。
  • 第二范式(2NF):在1NF基礎上,消除對主鍵的部分依賴。
  • 第三范式(3NF):在2NF基礎上,消除對主鍵的傳遞依賴。

實例代碼:

-- 假設有一個非規范化的訂單表(Orders),包含訂單詳情和產品信息。
CREATE TABLE Orders (OrderID INT PRIMARY KEY,ProductName VARCHAR(100),Price DECIMAL(10, 2),Quantity INT,TotalPrice AS (Price * Quantity) -- 計算總價
);-- 規范化后拆分為兩個表:訂單表(Orders)和產品表(Products)
CREATE TABLE Orders (OrderID INT PRIMARY KEY,ProductID INT,Quantity INT,FOREIGN KEY (ProductID) REFERENCES Products(ProductID)
);CREATE TABLE Products (ProductID INT PRIMARY KEY,ProductName VARCHAR(100),Price DECIMAL(10, 2)
);

5.1.2 SQL查詢優化與索引策略

查詢優化是性能提升的關鍵。以下是一些常見的查詢優化策略:

  • 避免在WHERE子句中使用函數或表達式。
  • 使用EXPLAIN計劃來分析SQL語句的執行計劃。
  • 合理使用索引,包括建立復合索引以及避免過度索引導致的性能開銷。

實例代碼:

-- 創建復合索引
CREATE INDEX idx_user_product ON Orders(ProductID, OrderID);-- 使用EXPLAIN分析查詢計劃
EXPLAIN SELECT * FROM Orders WHERE ProductID = 1;

5.2 異常處理方法與監控管理

5.2.1 異常的捕獲與日志記錄

在應用程序中合理捕獲和記錄異常是追蹤問題和性能瓶頸的重要手段。Spring Boot提供了多種方式記錄異常,包括通過日志框架記錄和使用Actuator。

操作步驟:

  1. 在應用中引入日志依賴(如Logback或Log4j)。
  2. 在配置文件中設置日志級別和格式。
  3. 在代碼中捕獲異常并記錄。

代碼示例:

try {// 業務代碼
} catch (Exception e) {// 使用日志框架記錄異常log.error("業務處理異常", e);
}

5.2.2 Spring Boot Actuator模塊應用

Spring Boot Actuator模塊提供了生產級別的監控和管理功能。通過這個模塊,我們可以了解應用的運行狀況,包括端點(Endpoint)監控、健康檢查等。

操作步驟:

  1. 引入Spring Boot Actuator依賴。
  2. 配置安全和權限控制,確保只有授權用戶才能訪問監控信息。
  3. 通過端點如 /actuator/health /actuator/metrics 了解應用狀態。

5.3 安全控制集成

5.3.1 常見的安全威脅與防范措施

在Web應用中常見的安全威脅包括SQL注入、XSS攻擊、CSRF攻擊和會話劫持等。針對這些威脅,采取以下防范措施:

  • 對所有的用戶輸入進行驗證和清理。
  • 使用HTTPS協議保護數據傳輸。
  • 使用CSRF令牌防止跨站請求偽造。
  • 實施會話管理策略,如使用安全cookie和令牌。

5.3.2 Spring Security集成與權限控制

Spring Security是一個強大的、可高度定制的身份驗證和訪問控制框架。通過集成Spring Security,我們可以實現細粒度的權限控制。

操作步驟:

  1. 引入Spring Security依賴。
  2. 配置Spring Security來定義用戶認證和授權策略。
  3. 使用注解如 @PreAuthorize 來控制方法級別的訪問。

代碼示例:

@Configuration
@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {@Overrideprotected void configure(HttpSecurity http) throws Exception {http.authorizeRequests().antMatchers("/admin/**").hasRole("ADMIN").anyRequest().authenticated().and().formLogin();}// 其他配置...
}

通過以上的操作和步驟,可以確保我們的應用在性能和安全性方面都有很好的保障。數據庫設計和SQL優化確保了數據操作的效率,異常處理和監控管理幫助我們維護系統的穩定性,而安全控制的集成則保障了應用的安全性。

本文還有配套的精品資源,點擊獲取 menu-r.4af5f7ec.gif

簡介:本項目旨在演示如何將SQLServer與Spring Boot以及Mybatis-Plus框架進行整合,打造一個高效穩定的后端服務。詳細介紹涉及了數據庫連接、實體類定義、Mapper接口創建、Service層業務邏輯編寫、Controller層API處理,以及運行測試等關鍵步驟。項目的核心知識點包括JDBC事務管理、Mybatis-Plus動態SQL、分頁查詢、數據庫優化、異常處理、安全控制等,為開發者提供了一個深入理解數據庫操作層構建的實踐案例。


本文還有配套的精品資源,點擊獲取
menu-r.4af5f7ec.gif

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

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

相關文章

【工作筆記】判斷一條方法需不需要事務/AOP

① 看注解方法/類上有 Transactional → 需要事務&#xff0c;必須走代理方法/類上有自定義 AOP 注解&#xff08;如 Log、Retry、Cacheable 等&#xff09;→ 需要代理什么都沒有 → 幾乎肯定不需要示例需求Transactional public void generateDailyTask(...)? 需要事務publi…

Unity 的UI動畫調節

在游戲開發中&#xff0c;精美的UI動畫能極大提升用戶體驗。Unity提供了強大的動畫系統&#xff0c;讓開發者可以輕松創建流暢的界面動效。本文將介紹UI動畫的核心概念、制作流程和實用技巧。一、核心動畫組件Animation窗口 - 可視化創建關鍵幀動畫Animator組件 - 控制動畫狀態…

26考研11408數據結構

數據結構 1.緒論1.1.1數據結構的基本概念 數據數據元素&#xff1a;數據的基本單位&#xff0c;一個數據元素由多個數據項組成&#xff0c;數據項是組成數據元素不可分割的最小單位數據對象&#xff1a;具有相同性質的數據元素的集合&#xff0c;是數據的一個子集數據類型&…

Solar月賽(應急響應)——攻擊者使用什么漏洞獲取了服務器的配置文件?

某某文化有限公司的運維小王剛剛搭建服務器發現cpu莫名的異常的升高請你幫助小王排查一下服務器。 文章目錄事件介紹事件1&#xff1a;幫助小王找到是什么漏洞?事件2&#xff1a;系統每天晚上系統都會卡卡的幫小明找到問題出在了那&#xff1f;事件3&#xff1a;惡意域名是什么…

高頻面試題

1.HashMap的底層原理JDK1.7版本之前&#xff0c;HashMap的底層數據結構是數組鏈表&#xff0c;HashMap通過哈希算法會將元素的key映射待數組的的槽位(Bucket)。如果多個鍵映射到同一個槽位&#xff0c;就會以鏈表的形式存儲在同一個槽位上。但是鏈表的查詢的復雜度O(n),所有沖突…

魚皮項目簡易版 RPC 框架開發(四)

本文為筆者閱讀魚皮的項目 《簡易版 RPC 框架開發》的筆記&#xff0c;如果有時間可以直接去看原文&#xff0c; 1. 簡易版 RPC 框架開發 前面的內容可以筆者的前面幾篇筆記 魚皮項目簡易版 RPC 框架開發&#xff08;一&#xff09; 魚皮項目簡易版 RPC 框架開發&#xff08;二…

力扣-79.單詞搜索

題目鏈接 79.單詞搜索 class Solution {int m, n;public boolean exist(char[][] board, String word) {m board.length;n board[0].length;boolean[][] visited new boolean[m][n];// 遍歷網格中的每個單元格作為搜索起點for (int i 0; i < m; i) {for (int j 0; j …

LabVIEW的To More Specific Class功能說明

?To More Specific Class 是 LabVIEW 中用于控件引用類型轉換的關鍵函數。可將通用 GObject 引用&#xff0c;精準轉為 Listbox、TreeControl 等特定控件類引用&#xff0c;讓開發者能調用專屬屬性&#xff08;如獲取列表行數&#xff09;&#xff0c;實現對不同控件類的差異化…

Ubuntu20.04安裝和配置Samba實現Win11下共享文件夾

Samba是在Linux和UNIX系統上實現 SMB / CIFS 協議的開源軟件&#xff0c;主要用于局域網內的文件共享和打印服務。Samba通過SMB/CIFS協議實現跨平臺資源共享&#xff0c;支持匿名用戶和本地用戶訪問共享目錄&#xff0c;客戶端主要為Windows系統。其核心進程包括&#xff1a; ?…

設計模式(八)結構型:橋接模式詳解

設計模式&#xff08;八&#xff09;結構型&#xff1a;橋接模式詳解橋接模式&#xff08;Bridge Pattern&#xff09;是 GoF 23 種設計模式中的結構型模式之一&#xff0c;其核心價值在于將抽象部分與實現部分分離&#xff0c;使它們可以獨立變化。它通過“組合”而非“繼承”…

【邊緣填充】——圖像預處理(OpenCV)

目錄 1 邊界復制&#xff08;BORDER_REPLICATE&#xff09; 2 邊界反射&#xff08;BOEDER_REFLECT&#xff09; 3 邊界反射101&#xff08;BORDER_REFLECT101&#xff09; 4 邊界常數&#xff08;BORDER_CONSTANT&#xff09; 5 邊界包裹&#xff08;BORDER_WRAP&#xf…

git同步到github出錯-幾個問題-一天晚上(2025.7.29)

訪問不了github 代理和加速器都正常&#xff0c;但是就是訪問不了這個網站嘗試過幾種方法都不行&#xff0c;后面突然可以了。 之后發現一種情況會不行&#xff1a;同時開啟 同步不了 http連接 https://blog.csdn.net/m0_73972962/article/details/146198392 一堆問題 ssh連接才…

Redis未授權訪問的利用的幾種方法原理以及條件

一、redis通過定時任務反彈shell1.利用條件&#xff1a;需要能夠登錄redis數據庫&#xff0c;并且redis以root用戶運行。同時/var/spool/cron目錄要具有寫和執行權限。二、Redis主從getshell1.原理&#xff1a;在Redis 4.x之后&#xff0c;Redis新增了模塊功能&#xff0c;通過…

DNF 與 YUM 的區別詳解:從 CentOS 7 到 CentOS 9 的演進

&#x1f365; DNF 與 YUM 的區別詳解&#xff1a;從 CentOS 7 到 CentOS 9 的演進標簽&#xff1a;CentOS、YUM、DNF、Linux 包管理、系統升級、兼容性 適用版本&#xff1a;CentOS 7、CentOS 8、CentOS 9&#x1f9e9; 一、背景介紹 CentOS 中使用的包管理工具是 RedHat 系列…

mp核心功能

條件構造器mybatisPlus支持各種復雜的where條件, 滿足日常的開發wrapper類就是條件構造器提供了很多子類條件構造器的用法&#xff1a;QueryWrapper和LambdaQueryWrapper通常用來構建select、delete、update的where條件部分UpdateWrapper和LambdaUpdateWrapper通常只有在set語句…

pcm,msd調制解調仿真

PCM&#xff08;脈沖編碼調制&#xff09;和MSD&#xff08;多符號差分&#xff09;調制解調系統的MATLAB仿真代碼。 PCM (脈沖編碼調制) 仿真 %% PCM調制解調仿真 clear; clc; close all;% 參數設置 Fs 8000; % 采樣頻率 (Hz) t_duration 0.02; % 信號持續時間 (秒…

【網絡安全】信息網絡安全建設方案(WORD)

1.1 安全整體架構 1.2 安全建設拓撲 1.3 安全建設內容與目標 2.1 用戶側安全建設思路 2.2 用戶側安全建設拓撲 2.3 用戶側安全建設內容 2.3.1 PKI 升級改造 2.3.2 安全防護 2.3.3 安全檢測 2.3.4 安全管理 3.1 跨網安全訪問與交換平臺安全建設思…

微服務 01

微服務是一種軟件架構風格&#xff0c;它是以專注于單一職責的很多小型項目為基礎&#xff0c;組合出復雜的大型應用。 &#xff08;對應的是單體架構風格&#xff09; 一、認識微服務 1、單體架構 單體架構&#xff1a;將業務的所有功能集中在一個項目中開發&#xff0c;打…

20250726讓榮品的PRO-RK3566開發板使用TF卡啟動

20250726讓榮品的PRO-RK3566開發板使用TF卡啟動 2025/7/26 8:58緣起&#xff1a;需要升級 榮品的PRO-RK3566核心板的 底板上的FPGA程序。 由于沒有使用RK809的電量計功能&#xff0c;板子一上電就會被關機&#xff01;^_于是給生產線制作了一張TF卡/啟動卡&#xff0c;插到底板…

Selenium使用指南

&#x1f345; 點擊文末小卡片&#xff0c;免費獲取軟件測試全套資料&#xff0c;資料在手&#xff0c;漲薪更快 概述selenium是網頁應用中最流行的自動化測試工具&#xff0c;可以用來做自動化測試或者瀏覽器爬蟲等。官網地址為&#xff1a;相對于另外一款web自動化測試工具QT…