Redis之十:Spring Data Redis --- CrudRepository方式

SpringData Redis CrudRepository方式

Spring Data Redis 的 CrudRepository 是 Spring Data 框架中用于提供基礎 CRUD(創建、讀取、更新和刪除)操作的一個接口。在與 Redis 集成時,盡管 Redis 是一個鍵值存儲系統,并沒有像關系型數據庫那樣直接支持復雜的 SQL 查詢語句,但 Spring Data Redis 通過自定義的 Repository 接口提供了對 Redis 數據進行 CRUD 操作的能力。

CrudRepository 是一系列通用數據訪問操作的基接口,它包含了一些如?save(T entity)deleteById(ID id)findAll()?等方法。當應用于 Redis 上時,這些方法會映射到相應的 Redis 命令或數據結構操作上。

一、配置 POM 依賴

兩種方式:使用連接池 和 不使用連接池

要使用連接池,多一個依賴,下面配置:

<dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId></dependency><!-- 如果使用連接池 --><dependency><groupId>org.apache.commons</groupId><artifactId>commons-pool2</artifactId></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope><exclusions><exclusion><groupId>org.junit.vintage</groupId><artifactId>junit-vintage-engine</artifactId></exclusion></exclusions></dependency>
</dependencies>

二、 配置文件 連接池

# Redis數據庫索引,默認為0
spring.redis.database=0
# Redis端口
spring.redis.port=6379
# Redis服務器主機
spring.redis.host=localhost
# 密碼
spring.redis.password=123456# 如果要用下面的連接池 則需要添加依賴commons-pool2
# 連接池最大連接數
spring.redis.lettuce.pool.max-active=8
# 連接池最大空閑
spring.redis.lettuce.pool.max-idle=8
# 連接池最小空閑
spring.redis.lettuce.pool.min-idle=2
# 連接池最大阻塞等待時間
spring.redis.lettuce.pool.max-wait=1ms
# 超時時間
spring.redis.lettuce.shutdown-timeout=100ms

三、 編寫實體類

注意:使用 redis 注解 @RedisHash

@Data
@RedisHash("User")               //----------注意 支持redis注解
public class User {@Id                           //-----------注意主鍵-----private String userId;@Indexed                    //-----------注意:如果要按 name 作為條件查詢,則必須要加注解 @Indexedprivate String name;private Integer age;private Date createTime = new Date();
}

如果我們需要在下面的 DAO 中按屬性查詢 (ByName) , 則在保存對象前,必須已經添加了 @Indexed 注解,否則查詢時查詢不到。

注意:保存入庫前!!!

三、編寫 Dao 接口

自定義接口只需要繼承 CrudRepository,默認接口中已經自帶 CRUD 方法,如果需要其他方法,按約定自定義方法。

public interface UserDao extends CrudRepository<User,String> {//按約定規則 自定義 按名字屬性查詢public List<User> findUserByName(String sname);Student findBySid(Integer sid);// 可以查全部List<Student> queryAllBy();
}

四、測試

package com.example.demo;import com.example.demo.pojo.User;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;import java.lang.reflect.Array;
import java.util.List;
import java.util.Optional;@SpringBootTest
class DemoApplicationTests {@Autowiredprivate UserDao userDao;@Testvoid save() {User user = new User();user.setAge(35);user.setName("Jack");user.setUserId("3");//保存和修改  支持。 主鍵存在則修改,不存在則保存userDao.save(user);}@Testvoid get(){Optional<User> byId = userDao.findById("1");if(byId.isPresent()){System.out.println(byId.get());}else{System.out.println("沒有值");}}@Testvoid findByname(){//測試自定義方法   (如果不支持,注意實體類中是否加@Indexed ,且在數據入庫前是否已經加此注解) List<User> list = userDao.findUserByName("Jack");System.out.println(list);}@Testvoid del(){//支持刪除userDao.deleteById("2");}}

執行保存之后,通過idea 的 redis 瀏覽器客戶端,查看結果

可以看到,保存時,把實體對象 標注 @Id 的屬性(主鍵)存入set 集合,保證主鍵唯一的特點。再把對象的屬性和數據,轉為 hash 類型存儲。

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

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

相關文章

華為機試真題實戰應用【算法代碼篇】-去除多余空格(附Java、C++和python代碼)

目錄 問題描述 輸入描述 輸出描述 樣例 思路解析 代碼實現

關于福彩歷史數據采集器和體彩歷史數據采集器的下載安裝說明

前段時間因為研究基于人工神經網絡&#xff08;深度學習&#xff0c;所謂的“AI”算法&#xff09;對3D開獎數據進行預測&#xff0c;開發了兩款瀏覽器插件----“福彩歷史數據采集器”和“體彩歷史數據采集器”。之所以開發這兩款插件&#xff0c;是因為不管是基于什么樣的方式…

Unity 游戲設計模式:觀察者模式

本文由 簡悅 SimpRead 轉碼&#xff0c; 原文地址 mp.weixin.qq.com 在 unity 游戲設計中&#xff0c;觀察者模式&#xff08;Observer Pattern&#xff09;有著重要的作用&#xff0c;它主要用于實現對象之間的一對多的依賴關系&#xff0c;當一個對象的狀態發生變化時&#x…

【QT+QGIS跨平臺編譯】之六十三:【QGIS_CORE跨平臺編譯】—【錯誤處理:未定義的類QgsMapLayer - QgsMapLayerModel】

文章目錄 一、未定義的類QgsMapLayer二、解決辦法 一、未定義的類QgsMapLayer 報錯&#xff1a; 二、解決辦法 QgsMapLayerModel.h文件中 ①第27行修改為&#xff1a; #include "QgsMapLayer.h" ②第23行增加&#xff1a; #include <QPointer>

Github 2024-03-03 開源項目日報Top9

根據Github Trendings的統計&#xff0c;今日(2024-03-03統計)共有9個項目上榜。根據開發語言中項目的數量&#xff0c;匯總情況如下&#xff1a; 開發語言項目數量非開發語言項目4Rust項目1C項目1Jupyter Notebook項目1Python項目1Shell項目1 任天堂Switch模擬器yuzu&#x…

將jar程序封裝為docker鏡像 shell腳本

將JAR程序封裝為Docker鏡像通常涉及編寫一個Dockerfile&#xff0c;然后使用docker build命令構建鏡像。然而&#xff0c;如果你想要通過一個shell腳本來自動化這個過程&#xff0c;你可以創建一個腳本&#xff0c;該腳本首先創建一個Dockerfile&#xff0c;然后使用docker bui…

嵌入式驅動學習第一周——linux設備管理模型

前言 現在來聊點原理性的東西——linux設備管理模型 嵌入式驅動學習專欄將詳細記錄博主學習驅動的詳細過程&#xff0c;未來預計四個月將高強度更新本專欄&#xff0c;喜歡的可以關注本博主并訂閱本專欄&#xff0c;一起討論一起學習。現在關注就是老粉啦&#xff01; 行文目錄…

編寫dockerfile掛載卷

編寫dockerfile文件 [rootwq docker-test-volume]# vim dockerfile1 [rootwq docker-test-volume]# cat dockerfile1 FROM centosVOLUME ["volume01","volume02"]CMD echo "------end------" CMD /bin/bash [rootwq docker-test-volume]#使用do…

leetcode:51.N皇后(復習)

題目理解&#xff1a;&#xff08;回溯算法&#xff09; 樹形結構——層數代表行數&#xff0c;遞歸的深度就是總行數。 代碼實現&#xff1a;

解釋Android中的Activity生命周期,以及在哪個生命周期方法中可以進行布局的初始化?

在Android中&#xff0c;Activity的生命周期是指Activity從創建到銷毀的整個過程&#xff0c;這個過程中會經歷一系列的回調方法。了解Activity的生命周期對于管理資源、處理用戶交互和確保應用的穩定性非常重要。下面是Activity生命周期的主要階段及其對應的回調方法&#xff…

手寫 Attention 迷你LLaMa2——LLM實戰

https://github.com/Yuezhengrong/Implement-Attention-TinyLLaMa-from-scratch 1. Attention 1.1 Attention 靈魂10問 你怎么理解Attention&#xff1f; Scaled Dot-Product Attention中的Scaled&#xff1a; 1 d k \frac{1}{\sqrt{d_k}} dk? ?1? 的目的是調節內積&…

分布式ID選型對比(4)

百度UID generator 一, 創建表: worker_node(在項目啟動時初始化生成workId) CREATE TABLE worker_node (ID bigint NOT NULL AUTO_INCREMENT COMMENT auto increment id,HOST_NAME varchar(64) NOT NULL COMMENT host name,PORT varchar(64) NOT NULL COMMENT port,TYPE int…

金屬3D打印新材料嶄露頭角,性能卓越引領行業新潮流

在3D打印模具制造領域&#xff0c;材料的選擇對最終產品的性能有著至關重要的影響。隨著技術的不斷進步&#xff0c;金屬3D打印材料正迅速發展&#xff0c;展現出強大的競爭力和創新潛力。其中&#xff0c;3D打印企業毅速推出的多款不銹鋼粉末材料&#xff0c;如EM191、EM191S、…

字符串函數 strncpy() 詳解

什么是 strncpy() 函數&#xff1f; strncpy() 函數是 C 語言中的一個標準庫函數&#xff0c;它的作用是從一個字符串中按照指定的長度復制字符到另一個字符串中。它的原型如下&#xff1a; char *strncpy(char *dest, const char *src, size_t n);其中&#xff0c;dest 是目…

VMware Workstation Pro 17 虛擬機軟件安裝教程

VMware軟件介紹 VMware Workstation是一款功能強大的桌面虛擬計算機軟件&#xff0c;提供用戶可在宿主機操作系統上同時運行不同的操作系統(虛擬化技術)&#xff0c;所運行的操作系統可方便的進行復制和移動&#xff0c;突破傳統架構的限制。本文將以VMware Workstation Pro 1…

使用lnmp環境部署laravel框架需要注意的點

1&#xff0c;上傳項目文件后&#xff0c;需要chmod -R 777 storage授予文件權限&#xff0c;不然會報錯file_put_contents(/): failed to open stream: Permission denied。 如果后面還是報錯沒有權限的話&#xff0c;就執行ps -ef |grep php查詢php運行用戶。然后執行chown …

2024真正有效的蘋果mac電腦清理工具CleanMyMac X

一、前言 對于Mac用戶來說&#xff0c;電腦卡頓、運行緩慢無疑是一件令人頭疼的事情。而市面上的清理軟件又五花八門&#xff0c;效果參差不齊&#xff0c;如何才能找到一款真正有效的清理工具呢&#xff1f;今天&#xff0c;我們為大家推薦一款實力派電腦清理軟件——CleanMy…

【雙指針】刪除有序數組中重復元素,雙指針原地修改數組

刪除有序數組中重復元素 鏈接 . - 力扣&#xff08;LeetCode&#xff09;. - 備戰技術面試&#xff1f;力扣提供海量技術面試資源&#xff0c;幫助你高效提升編程技能,輕松拿下世界 IT 名企 Dream Offer。https://leetcode.cn/problems/remove-duplicates-from-sorted-array/…

宏定義中#與##的注意事項

1. #是字符串化操作符。它的作用是將宏參數轉換成字符串 2. ##是標記粘貼操作符。它的作用是將兩個標記連接起來形成一個新的標記 #define TEST1(a) #a #define TEST2(a) b##a/***********************************************************/ 舉例&#xff1a;TEST1(hello) 會…

python virtualenv創建虛擬環境

文章目錄 安裝virtualenv在當前目錄創建虛擬環境命令進入虛擬環境激活虛擬環境查看python版本退出虛擬環境 安裝virtualenv pip install virtualenv在當前目錄創建虛擬環境命令 python -m virtualenv venvPS E:\coding\bertopic> python -m virtualenv venv created virtu…