Spring Boot 與 MyBatis Plus 整合 KWDB 實現 JDBC 數據訪問

?

引言

本文主要介紹如何在 IDEA 中搭建一個使用 Maven 管理的 Spring Boot 應用項目工程,并結合在本地搭建的 KWDB 數據庫(版本為:2.0.3)來演示 Spring Boot 與 MyBatis Plus 的集成,以及對 KWDB 數據庫的數據操作訪問等。

技術選型

本文示例工程所使用的 JDK、Maven、Spring Boot 與 MyBatis Plus 的版本如下:

Maven:Apache Maven 3.6.3
Spring Boot:2.7.18
MyBatis Plus:com.baomidou:mybatis-plus-boot-starter:3.5.5

本文選擇 Spring Boot 作為應用框架、MyBatis Plus 作為 ORM 框架、KWDB 作為數據庫的優點和適用場景如下:

標題Spring Boot 應用框架優點和適用場景

? 簡化開發:通過自動化配置和約定優于配置的方式,極大地簡化了 Spring 應用程序的開發和部署過程;

? 集成度高:提供了大量的開箱即用的功能模塊(如:數據訪問等),支持快速集成第三方庫和服務;

? 微服務支持:提供了微服務架構支持,可以輕松集成 Spring Cloud 等微服務框架;

? 生態系統強大:擁有龐大且活躍的社區,提供了豐富的文檔、教程和支持,可以快速解決開發中的問題;

? 適用場景:適合構建各種類型的 Java 應用程序,特別是 Web 應用和微服務架構。

使用 Maven 管理項目的優點

? 依賴管理:能夠有效管理項目所需的依賴庫(如 JAR 包),支持自動下載、更新和配置這些依賴項;

? 標準化項目結構:定義了標準的項目結構,包括源代碼、資源文件、測試代碼等目錄結構;

? 構建自動化:支持自動化構建,通過簡單的命令即可完成復雜的構建任務;

? 插件生態系統:擁有豐富的插件生態系統,可以擴展其功能,支持各種任務和需求。

MyBatis Plus 框架的優點和適用場景

? 簡化操作:提供了更便捷的 API 和更豐富的功能,簡化了與數據庫的交互操作;

? 代碼生成:支持代碼生成器,可以根據數據庫表自動生成實體類、Mapper 接口以及基本的 CRUD 方法;

? 強大的條件構造器:提供了靈活而強大的條件構造器(Wrapper),可以通過構建條件對象來生成復雜的 SQL 查詢語句,提高了開發效率;

? 適用場景:適合需要靈活控制 SQL 的項目工程。

KWDB 數據庫的優點

? 多模數據支持:支持時序型和關系型數據采、存、算、管功能和數據跨模計算與分析;

? 高性能寫入:依托“就地計算”技術實現高性能讀寫,支持千萬級數據秒級寫入和毫秒級精度數據寫入;

? 實時查詢與分析:支持數據實時分析,千萬級數據聚合查詢毫秒級響應,提供豐富的函數支持;

? 低成本:支持 10 倍以上的數據壓縮,數據降采樣存儲,按“時間熱度”進行數據生命周期管理;

? 多重安全性保障:支持身份鑒權、權限管理、數據庫審計,以及通信加密和數據加密;

? 高兼容性:支持 SQL 語言,兼容 PG,MySQL 語法,支持 Java/C++ 等多種開發語言,支持 RestfulAPI;

? 適用場景:面向工業物聯網、數字能源、車聯網、智慧產業等各大行業領域。

環境搭建

1. 應用項目初始化

首先使用 IDEA 初始化創建一個 Spring Boot 項目工程,語言選中 Java,類型是 Maven 項目,JDK 選擇 JDK8(也叫 JDK1.8),由于官網提供的 JDK 最低版本是 JDK17,所以在第 4 步 Java 選項中找不到 Java8 選項,但是阿里云提供了 JDK8 版本資源,因此將構建項目的 Server URL 服務地址更換為阿里云服務:start.aliyun.com,具體步驟如下:

a. 新建 Spring Boot 應用項目;

在這里插入圖片描述

b. 點擊下一步,選擇要加載的依賴項,并完成創建;

在這里插入圖片描述

c. 找到項目路徑 /src/main/resources 中的 application.properties,將其修改為更常用的 application.yml 文件。

在這里插入圖片描述

2. 引入 MyBatis Plus 依賴

在 kaiwudb-app 項目的 pom.xml 文件中引入 MyBatis Plus 的依賴項;

<!-- https://mvnrepository.com/artifact/com.baomidou/mybatis-plus-boot-starter -->
<dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.5.5</version>
</dependency>

3. 引入 JDBC 依賴

JDBC 驅動尚未在 Maven 中央倉庫中提供,用戶需先獲取 kaiwudb-jdbc-2.0.4.jar 文件,通過 Maven 管理工具,執行安裝命令將 JDBC 驅動安裝到本地 Maven 倉庫中,安裝命令如下:

#KaiwuDB JDBC 安裝命令,其中 -Dfile 參數為安裝包路徑
$ mvn install:install-file "-Dfile=../kaiwudb-jdbc-2.0.4.jar" "-DgroupId=com.kaiwudb" "-DartifactId=kaiwudb-jdbc" "-Dversion=2.0.4" "-Dpackaging=jar"

在 kaiwudb-app 項目的 pom.xml 文件中引入 JDBC 驅動的依賴項;

XML
<!-- kaiwudb jdbc 2.0.4 -->
<dependency><groupId>com.kaiwudb</groupId><artifactId>kaiwudb-jdbc</artifactId><version>2.0.4</version>
</dependency>

pom.xml 文件在 IDEA 中引入 MyBatis Plus 依賴項顯示如下:

在這里插入圖片描述

應用配置

1. 數據源配置

數據源配置涉及到如何設置和管理數據庫,包括數據庫的連接信息、連接超時等參數。在 Spring Boot 中,通常通過配置文件(application.properties 或 application.yml)來配置數據源信息。

KWDB 支持關系和時序兩種引擎,以下是連接操作 KWDB 數據庫關系引擎時的數據源配置信息:

spring:datasource:url: jdbc:kaiwudb://127.0.0.1:26257/kwdb_app  # URL 鏈接地址username: test  # 用戶名password: Password@2024  # 密碼driver-class-name: com.kaiwudb.Driver  # 驅動名

2. MyBatis Plus 配置

配置 MyBatis Plus 包括但不限于設置 Mapper 掃描路徑、配置全局參數、注入自定義 SQL 攔截器等。在 Spring Boot 中,可以通過配置文件(application.properties 或 application.yml)和配置類(如使用 @Configuration 注解的類)來配置 MyBatis Plus 的各項功能。

以下是在配置文件中對 MyBatis Plus 的相關配置信息:

mybatis-plus:configuration:map-underscore-to-camel-case: true  # 開啟駝峰命名自動映射log-impl: org.apache.ibatis.logging.stdout.StdOutImpl  # 開啟日志打印type-aliases-package: com.kaiwudb.app.entity  # 對應實體類路徑mapper-locations: classpath:mapper/*.xml   # 對應 mapper 映射 xml 文件

數據庫配置

KWDB 支持使用其提供的客戶端命令行工具和圖形化工具 KaiwuDB Developer Center(KDC),對 KaiwuDB 進行操作,這里我們使用 KaiwuDB 客戶端命令行工具,在 KaiwuDB 數據庫中創建關系數據庫和關系表,如下:

創建一個關系數據庫

create database kwdb_app;

在這里插入圖片描述

創建一個用于存儲傳感器數據的關系表

CREATE TABLE IF NOT EXISTS kwdb_app.sensor_data (id SERIAL PRIMARY KEY,sensor_id VARCHAR(20) NOT NULL,temperature DOUBLE,humidity DOUBLE,pressure DOUBLE,distance INT,description VARCHAR(255),is_active BOOLEAN DEFAULT true,raw_data BYTEA,record_time TIMESTAMP DEFAULT NOW(),del_flag CHAR(1)
);

應用示例

以物聯網中常用傳感器設備為例,本文以下示例將展示如何通過編寫 SpringBoot+MyBatis Plus 應用程序,來實現對傳感器設備數據進行增、刪、改、查等,從而實現對 KaiwuDB 數據庫中的數據進行 CRUD 訪問操作。

1. 實體類

創建一個記錄傳感器數據的實體類 SensorData,需加入 @Data 和 @TableName 注解,使用 @Data 注解可以自動為實體類的字段生成 getter、setter、equals、canEqual、hashCode 和 toString 方法;使用 @TableName 注解用于指定實體類對應的數據表名稱;

package com.kaiwudb.app.entity;import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;import java.time.LocalDateTime;@Data
@TableName("sensor_data")
public class SensorData {private Long id;                  // 主鍵,自動增長的唯一標識符@TableField("sensor_id")private String sensorId;          // 傳感器的唯一標識符private Double temperature;       // 傳感器讀取的溫度數據private Double humidity;          // 傳感器讀取的濕度數據private Double pressure;          // 傳感器讀取的壓力數據private Integer distance;         // 傳感器距離private String description;       // 傳感器的詳細描述信息@TableField("is_active")private Boolean active;           // 表示傳感器是否處于活動狀態@TableField("raw_data")private byte[] rawData;           // 存儲傳感器數據的原始字節@TableField("record_time")private LocalDateTime recordTime; // 記錄數據插入的時間戳@TableField("del_flag")private String delFlag;           // 傳感器是否刪除標志位,0-未刪除,1-已刪除
}

結果如下:
在這里插入圖片描述

2. Mapper 接口

在 mapper 文件夾下創建 Mapper 接口 SensorDataMapper,繼承 BaseMapper 接口,并使用 @Mapper 和 @Repository 注解,無需再手動實現基本的 CRUD 方法,MyBatis Plus 會自動生成;BaseMapper 是 MyBatis Plus 提供的一個接口,用于快速實現常見的數據庫操作,如插入、更新、刪除和查詢等。

package com.kaiwudb.app.mapper;import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.kaiwudb.app.entity.SensorData;
import org.apache.ibatis.annotations.Mapper;
import org.springframework.stereotype.Repository;@Mapper
@Repository
public interface SensorDataMapper extends BaseMapper<SensorData> {// 自定義 SQL 方法
}

結果如下:
在這里插入圖片描述

? 新增 mapper.xml(可選)

在 SensorDataMapper 接口類中支持用戶自定義 SQL 方法,比如自定義按照 record_time 查詢數據的接口;在 mapper 文件夾下的 SensorDataMapper 接口類新增內容如下:

List<SensorData> selectListBetweenTime(@Param("beginTime") LocalDateTime beginTime,@Param("endTime") LocalDateTime endTime);

結果如下:
在這里插入圖片描述

然后在 resources 資源目錄下新建 mapper 文件夾,并新建 SensorDataMapper.xml 文件,在其中添加以下 SQL 內容:

? 注:select 標簽中 id 為 selectListBetweenTime 的 SQL 語法,對應 mapper 中 selectListBetweenTime 接口;

<?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.kaiwudb.app.mapper.SensorDataMapper"><select id="selectListBetweenTime" resultType="com.kaiwudb.app.entity.SensorData">SELECT *FROM sensor_dataWHERE record_time BETWEEN #{beginTime} AND #{endTime}</select>
</mapper>

3. Service 服務

在 service 文件夾下創建 SensorDataService 接口服務類和其對應的實現類 SensorDataServiceImpl,并使用定義的 SensorDataMapper 數據訪問接口類進行數據庫操作;本文定義了如下示例接口,分別表示對傳感器數據的增、改、刪、查等,其中數據查詢接口擴展了幾種不同的查詢方式,包括:按 ID 查詢、按 sensorId 查詢、按時間范圍查詢 和 查詢全部數據 等;

(1)SensorDataService 接口服務類

package com.kaiwudb.app.service;import com.kaiwudb.app.entity.SensorData;import java.util.List;public interface SensorDataService {int insertSensorData(SensorData data);int updateSensorData(SensorData data);int deleteById(Long id);SensorData findById(Long id);List<SensorData> findBySensorId(String sensorId);List<SensorData> findByRecordTime(String beginTime, String endTime);List<SensorData> findAll();
}

結果展示:

在這里插入圖片描述

(2)SensorDataServiceImpl 接口服務實現類,其通過加載并調用 SensorDataMapper 接口類的方法,對數據庫數據進行操作訪問;
package com.kaiwudb.app.service.impl;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.kaiwudb.app.entity.SensorData;
import com.kaiwudb.app.mapper.SensorDataMapper;
import com.kaiwudb.app.service.SensorDataService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.List;@Service
public class SensorDataServiceImpl implements SensorDataService {@Autowiredprivate SensorDataMapper sensorDataMapper;@Overridepublic int insertSensorData(SensorData data) {return sensorDataMapper.insert(data);}@Overridepublic int updateSensorData(SensorData data) {return sensorDataMapper.updateById(data);}@Overridepublic int deleteById(Long id) {return sensorDataMapper.deleteById(id);}@Overridepublic SensorData findById(Long id) {return sensorDataMapper.selectById(id);}@Overridepublic List<SensorData> findBySensorId(String sensorId) {return sensorDataMapper.selectList(new QueryWrapper<SensorData>().eq("sensor_id", sensorId));}@Overridepublic List<SensorData> findByRecordTime(String beginTime, String endTime) {LocalDateTime beginDateTime = LocalDateTime.parse(beginTime, DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SSS"));LocalDateTime endDateTime = LocalDateTime.parse(endTime, DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SSS"));return sensorDataMapper.selectListBetweenTime(beginDateTime, endDateTime);}@Overridepublic List<SensorData> findAll() {return sensorDataMapper.selectList(null);}
}

結果如下:

在這里插入圖片描述

4.Controller 控制

在 controller 文件夾下創建一個 SensorDataController 控制器來處理 HTTP 請求,以下是操作請求傳感器數據的示例實現,包括對傳感器數據的增、改、刪、查等操作;

package com.kaiwudb.app.controller;import com.kaiwudb.app.entity.SensorData;
import com.kaiwudb.app.service.SensorDataService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.format.annotation.DateTimeFormat;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;import java.util.List;@RestController
@RequestMapping("/sensor-data")
public class SensorDataController {@Autowiredprivate SensorDataService sensorDataService;@PostMapping("/add")public int addSensorData(@RequestBody SensorData data) {return sensorDataService.insertSensorData(data);}@PutMapping("/update")public int updateSensorData(@RequestBody SensorData data) {return sensorDataService.updateSensorData(data);}@DeleteMapping("/{id}")public int deleteSensorDataById(@PathVariable Long id) {return sensorDataService.deleteById(id);}@GetMapping("/{id}")public SensorData getSensorDataById(@PathVariable Long id) {return sensorDataService.findById(id);}@GetMapping("/by-sensor-id/{sensorId}")public List<SensorData> getSensorDataBySensorId(@PathVariable String sensorId) {return sensorDataService.findBySensorId(sensorId);}@GetMapping("/by-timestamp")public List<SensorData> getSensorDataByRecordTime(@RequestParam("beginTime") @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss.SSS") String beginTime,@RequestParam("endTime") @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss.SSS") String endTime) {return sensorDataService.findByRecordTime(beginTime, endTime);}@GetMapping("/all")public List<SensorData> getAllSensorData() {return sensorDataService.findAll();}
}

結果如下:
在這里插入圖片描述

5. 主程序加注解

在新建 Spring Boot 應用項目的時,其會自動創建應用項目初始化運行的主類,通常放置在包的根目錄下;本文中創建的主程序類文件名為 KaiwudbAppApplication,其會通過 public static void main(String[] args) 方法啟動應用程序;本文需要在主程序中增加運行時需加載的配置類注解等,具體內容如下:

package com.kaiwudb.app;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplication(scanBasePackages = "com.kaiwudb.app")
public class KaiwudbAppApplication {public static void main(String[] args) {SpringApplication.run(KaiwudbAppApplication.class, args);}
}

結果如下:
在這里插入圖片描述

? @SpringBootApplication 注解: Spring Boot 的核心注解,通常放在主類上,它整合了多個注解:@Configuration、@EnableAutoConfiguration 和 @ComponentScan。

a. @Configuration:用于定義配置類,可以包含@Bean方法來聲明Bean;

b. @EnableAutoConfiguration:使得Spring Boot能夠根據類路徑下的jar包、類、和各種屬性設置來自動配置 Spring 應用程序;

c. @ComponentScan:默認掃描該類所在包及其子包下的所有組件類(包括 @Component, @Service, @Repository 等注解標記的類),并注冊為 Spring Bean。

? scanBasePackages 參數: 指定了 Spring Boot 應該掃描的基礎包路徑,確保 Spring Boot 能夠掃描到應用程序的所有組件類非常重要,包括控制器、服務、存儲庫等。

6. 啟動應用程序

在 IDEA 中啟動應用程序時,先找到類名為 KaiwudbAppApplication 的主程序,然后點擊右鍵,在其中找到 Run ‘KaiwudbAppApplication’ 選項并選中來啟動應用程序如下圖所示:

在這里插入圖片描述

啟動成功后,在 IDEA 控制臺中顯示結果如下:
在這里插入圖片描述

7. 訪問操作示例

以下內容是在啟動上述應用程序后,通過 Postman 工具以 Http 請求的方式來訪問調用接口,從而通過每個接口實現的功能,來對 KaiwuDB 數據庫中的數據進行操作使用等,示例如下:

? 增加數據(顯示成功插入 1 條數據)
在這里插入圖片描述

? 修改數據(顯示成功修改 1 條數據)
在這里插入圖片描述

? 刪除數據(顯示成功刪除 1 條數據)

在這里插入圖片描述

? 按 sensorId 查詢數據(顯示全部 sensorId 為 sensor002 的數據)
在這里插入圖片描述

? 按時間范圍查詢(顯示全部在查詢時間范圍內的數據)
在這里插入圖片描述

總結

本文詳細介紹了如何在 IDEA 中使用 Maven 管理的 Spring Boot 項目整合 KaiwuDB 數據庫,并結合 MyBatis Plus 實現 JDBC 數據訪問的過程。以下是關鍵點和總結:

? 技術選型和環境搭建:使用 OpenJDK 1.8、Apache Maven 3.6.3、Spring Boot 2.7.18 和 MyBatis Plus 3.5.5 版本;通過 IDEA 創建基于 Maven 的 Spring Boot 項目,并配置 Java 8 作為開發環境。

? MyBatis Plus 和 KaiwuDB 的集成:引入 MyBatis Plus 依賴,配置 Mapper 掃描路徑和全局參數;KaiwuDB 的 JDBC 驅動需要手動安裝到本地 Maven 倉庫中,以便項目能夠操作使用 KaiwuDB 數據庫。

? 應用配置:數據源配置和 MyBatis Plus 配置是整合過程中的關鍵步驟,需要在 Spring Boot 的配置文件 application.yml 中進行配置,包括數據源的連接信息和 MyBatis Plus 的特定配置項。

? 數據庫操作示例:創建 SensorData 實體類和 SensorDataMapper 接口,利用 MyBatis Plus 的 BaseMapper 接口快速實現常見的數據庫操作;編寫 SensorDataService 服務類來實現業務邏輯,通過 SensorDataMapper 進行數據庫操作,例如增、刪、改、查等。

? Controller 層和應用啟動:編寫 SensorDataController 來處理 HTTP 請求,定義接口訪問路徑,并通過 Service 層實現對數據庫的操作;主程序類 KaiwudbAppApplication 通過 Spring Boot 的注解來配置和啟動應用程序。

? 訪問操作示例:使用 Postman 等工具通過 HTTP 請求訪問 SensorDataController 定義的接口,從而操作和驗證對 KaiwuDB 數據庫中數據的增、刪、改、查功能。

綜上所述,本文通過詳細的步驟和示例,展示了如何利用 Spring Boot、MyBatis Plus 和 KWDB 進行應用項目的開發,提供了整合過程中的關鍵點和可能的擴展方向。讀者可以通過本文學習到如何搭建和配置環境、實現數據訪問層的開發,以及如何利用 Spring Boot 快速開發和集成 KaiwuDB 數據庫。

參考資料

本文 MyBatis Plus 插件的使用,參考了官網提供的使用說明文檔,如有其他需要請參考官網文檔>>https://baomidou.com/getting-started/

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

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

相關文章

Java鎖等待喚醒機制

在 Java 并發編程中&#xff0c;鎖的等待和喚醒機制至關重要&#xff0c;通常使用 wait()、notify() 和 notifyAll() 來實現線程間的協調。本文將詳細介紹這些方法的用法&#xff0c;并通過示例代碼加以說明。 1. wait()、notify() 與 notifyAll() 在 Java 中&#xff0c;Obj…

? UNIX網絡編程筆記:TCP客戶/服務器程序示例

服務器實例 有個著名的項目&#xff0c;tiny web&#xff0c;本項目將其改到windows下&#xff0c;并使用RAII重構&#xff0c;編寫過程中對于內存泄漏確實很頭疼&#xff0c;還沒寫完&#xff0c;后面會繼續更&#xff1a; #include <iostream> #include <vector&g…

AI Agent開發大全第四課-提示語工程:從簡單命令到AI對話的“魔法”公式

什么是提示語工程&#xff1f;一個讓AI“聽話”的秘密 如果你曾經嘗試過用ChatGPT或者其他大語言模型完成任務&#xff0c;那么你一定遇到過這樣的情況&#xff1a;明明你的問題是清晰的&#xff0c;但答案卻離題萬里&#xff1b;或者你認為自己提供的信息足夠詳盡&#xff0c…

系統架構設計知識體系總結

1.技術選型 1.什么是技術選型&#xff1f; 技術選型是指評估和選擇在項目或系統開發中使用的最合適的技術和工具的過程。這涉及考慮基于其能力、特性、與項目需求的兼容性、可擴展性、性能、維護和其他因素的各種可用選項。技術選型的目標是確定與項目目標相符合、能夠有效解…

基于3DMax與Vray引擎的輕量級室內場景渲染實踐

歡迎踏入3DMAX室內渲染的沉浸式學習之旅!在這個精心設計的實戰教程中,我們將攜手揭開3DMAX與Vray這對黃金搭檔在打造現實室內場景時的核心奧秘。無論您是渴望入門的3D新手,還是追求極致效果的專業設計師,這里都將為您呈現從場景藍圖構建到光影魔法施加的完整技術圖譜。我們…

邏輯卷,vdo,(阿里加速器)

一、邏輯卷 10 20 30 1.邏輯卷的2個特點 &#xff08;1&#xff09;邏輯卷可以將多個分區或者磁盤整合成一個更大的邏輯磁盤&#xff0c;然后可以從邏輯磁盤上劃分出分區&#xff08;邏輯磁盤的大小等于整合的物理磁盤大小之和。&#xff09; &#xff08;2&#xff09;能…

檢索增強生成(2)本地PDF 本地嵌入模型

from langchain_community.document_loaders import PyPDFLoader from pathlib import Pathdef load_local_pdf(file_path):if not Path(file_path).exists():raise FileNotFoundError(f"文件 {file_path} 不存在&#xff01;")loader PyPDFLoader(file_path)try:do…

安全守護:反光衣檢測技術的革新之路

視覺分析助力船上工人反光衣檢測 在現代工業生產與作業環境中&#xff0c;安全始終是首要考慮的因素。對于水上作業&#xff0c;如船舶維護、海上施工等場景&#xff0c;工人穿戴反光衣是預防事故、提高可見性的重要措施。然而&#xff0c;傳統的人工檢查方式不僅效率低下&…

【Scrapy】Scrapy教程8——處理子鏈接

通過前面幾篇文章,已經了解了如何去爬取網頁內容并存儲到數據庫,但是目前只是存儲了一個頁面的內容,現在想要獲取每篇文章鏈接內的文章內容,我們來看看怎么獲取。 生成新請求 首先我們肯定要先拿到鏈接,所以第一步都獲取文章標題和鏈接肯定少不了,然后再爬取獲取到到子…

Centos6配置yum源

Centos6配置yum源 為Centos6配置CentOS Vault源—防止yum源過期為Centos6配置epel源為Centos6配置ELRepo源---已ELRepo被官方清空Centos6安裝dockerdocker配置國內鏡像加速 為Centos6配置CentOS Vault源—防止yum源過期 參考&#xff1a;https://mirrors.ustc.edu.cn/help/cen…

“智改數轉”新風口,物聯網如何重構制造業競爭力?

一、政策背景 為深化制造業智能化改造、數字化轉型、網絡化聯接&#xff0c;江蘇省制定了《江蘇省深化制造業智能化改造數字化轉型網絡化聯接三年行動計劃&#xff08;2025&#xff0d;2027年&#xff09;》&#xff0c;提出到2027年&#xff0c;全省制造業企業設備更新、工藝…

制作Oracle11g Docker 鏡像

基于Linux系統&#xff0c;宿主主機要設置如下環境變量&#xff0c;oracle為64位版本 dockerfile中需要的數據庫安裝包可從csdn下載內找到 #!/bin/bash # 在宿主機上運行以設置Oracle所需的內核參數 # 這些命令需要root權限cat > /etc/sysctl.d/99-oracle.conf << EO…

從GTC2025首次量子日看英偉達量子AI融合算力網絡前景與趨勢

GTC2025 Quantum Day 最新內容全部匯總: 技術名稱描述合作伙伴/開發者應用場景/目標量子模擬器優化方案NVIDIA與IonQ、D-Wave合作,針對量子模擬器進行性能優化,提升量子計算任務效率。IonQ、D-Wave量子算法開發、復雜系統模擬混合量子-經典計算架構結合量子計算與經典GPU加速…

UE4學習筆記 FPS游戲制作12 添加第二把槍,制作槍的父類,動態生成物體,切換武器

我們添加一個發射器類型的槍 我們目前有了一個Rifle的槍械藍圖&#xff0c;我們在添加Launcher時&#xff0c;需要為他們添加一個父類&#xff0c;將公共方法放到父類里&#xff0c;方法體由子類實現 添加父類 方法1 新建一個Gun的藍圖&#xff0c;Gun繼承Actor&#xff0c;…

【原創首發】開源基于AT32 SIP/VOIP電話

前言 本次為了反饋各位粉絲的關注&#xff0c;特此分享 AT32_VOIP 工程&#xff0c;此功能其實跟我之前發過的《STM32F429的VOIP功能》是一樣的&#xff0c;只是用了AT32F437。 其實那個工程是一個比較Demo中的Demo&#xff0c;很多功能和硬件依賴性太大了。后面項目中發現AT…

通俗易懂搞懂@RequestParam 和 @RequestBody

&#x1f4cc; 博主簡介: &#x1f4bb; 努力學習的 23 級科班生一枚 &#x1f680;&#x1f3e0; 博主主頁 &#xff1a; &#x1f4ce; 灰陽陽&#x1f4da; 往期回顧 &#xff1a;Session和Cookie我不允許你不懂&#x1f4ac; 每日一言&#xff1a; 「流水不爭先&#xff0c…

dubbo版本與分組

Dubbo服務中&#xff0c;接口并不能唯一確定一個服務&#xff0c;只有 接口分組版本號 的三元組才能唯一確定一個服務。 當同一個接口針對不同的業務場景、不同的使用需求或者不同的功能模塊等場景&#xff0c;可使用服務分組來區分不同的實現方式。同時&#xff0c;這些不同實…

RAG現有技術方案

RAG現有技術方案 一、現有技術方案的核心問題 檢索質量不足 挑戰:傳統RAG系統依賴單輪檢索,難以應對智能電網的海量異構數據(如傳感器讀數、控制參數),導致檢索結果相關性低、覆蓋不全。案例:BM25稀疏檢索在處理長文本或專業術語時,易遺漏語義關聯;BGE等稠密檢索模型對…

redis MISCONF Redis is configured to save RDB snapshots報錯解決

直接上解決方案 修改redis配置文件 stop-writes-on-bgsave-error no 重啟redis

個人學習編程(3-22) leetcode刷題

連續子數組&#xff1a;&#xff08;難&#xff09; 示例 1: 輸入: nums [0,1] 輸出: 2 說明: [0, 1] 是具有相同數量 0 和 1 的最長連續子數組。 示例 2: 輸入: nums [0,1,0] 輸出: 2 說明: [0, 1] (或 [1, 0]) 是具有相同數量0和1的最長連續子數組。 需要理解的知識&a…