最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

springboot使用RedisRepository操作數(shù)據(jù)的實現(xiàn)

 更新時間:2022年05月30日 09:06:25   作者:字母哥哥  
本文主要介紹了springboot使用RedisRepository操作數(shù)據(jù)的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

通過集成spring-boot-starter-data-redis之后一共有三種redis hash數(shù)據(jù)操作方式可以供我們選擇

  • 一個屬性、一個屬性的存取
  • 使用Jackson2HashMapper存取對象
  • 使用RedisRepository的對象操作(本節(jié)核心內(nèi)容)

一、一個屬性、一個屬性的存取

這種方式在本專欄上一文章中的代碼,已經(jīng)得以體現(xiàn)。

@Test
public void HashOperations() {
    Person person = new Person("kobe","byrant");
    person.setAddress(new Address("洛杉磯","美國"));
    //使用hash的方法存儲對象數(shù)據(jù)(一個屬性一個屬性的存,下節(jié)教大家簡單的方法)
    hashOperations.put("hash:player","firstname",person.getFirstname());
    hashOperations.put("hash:player","lastname",person.getLastname());
    hashOperations.put("hash:player","address",person.getAddress());

    String firstName = (String)hashOperations.get("hash:player","firstname");
    System.out.println(firstName);
}

數(shù)據(jù)在redis數(shù)據(jù)庫里面存儲結構是下面這樣的

在這里插入圖片描述

  • 一個hash代表一個對象的數(shù)據(jù)
  • 一個對象有多個屬性key、value鍵值對數(shù)據(jù),每一組鍵值對都可以單獨存取

二、使用Jackson2HashMapper存取對象

上一小節(jié)我們操作hash對象的時候是一個屬性一個屬性設置的,那我們有沒有辦法將對象一次性hash入庫呢?我們可以使用jacksonHashOperations和Jackson2HashMapper

import static org.junit.jupiter.api.Assertions.assertEquals;

@SpringBootTest
public class RedisConfigTest3 {

    @Resource(name="redisTemplate")
    private HashOperations<String, String, Object> jacksonHashOperations;
    //注意這里的false,下文會講解
    private HashMapper<Object, String, Object> jackson2HashMapper = new Jackson2HashMapper(false);

    @Test
    public void testHashPutAll(){

        Person person = new Person("kobe","bryant");
        person.setId("kobe");
        person.setAddress(new Address("洛杉磯","美國"));

        //將對象以hash的形式放入redis數(shù)據(jù)庫
        Map<String,Object> mappedHash = jackson2HashMapper.toHash(person);
        jacksonHashOperations.putAll("player:" + person.getId(), mappedHash);

        //將對象從數(shù)據(jù)庫取出來
        Map<String,Object> loadedHash = jacksonHashOperations.entries("player:" + person.getId());
        Object map = jackson2HashMapper.fromHash(loadedHash);
        Person getback = new ObjectMapper().convertValue(map,Person.class);

        //Junit5,驗證放進去的和取出來的數(shù)據(jù)一致
        assertEquals(person.getFirstname(),getback.getFirstname());
    }
}

使用這種方式可以一次性的存取java 對象為redis數(shù)據(jù)庫的hash數(shù)據(jù)類型。需要注意的是:執(zhí)行上面的測試用例,Person和Address一定要有public無參構造方法,在將map轉換成Person或Address對象的時候用到,如果沒有的話會報錯。

new Jackson2HashMapper(false),注意屬性對象Address的存儲格式(兩張圖對比觀察)

在這里插入圖片描述

new Jackson2HashMapper(true),注意屬性對象Address的存儲格式(兩張圖對比觀察)

在這里插入圖片描述

需要注意的是:使用這種方法存儲hash數(shù)據(jù),需要多出一個鍵值對@class說明該hash數(shù)據(jù)對應的java類。在反序列化的時候會使用到,用于將hash數(shù)據(jù)轉換成java對象。

三、使用RedisRepository的對象操作

下面為大家介紹使用RedisRepository進行redis數(shù)據(jù)操作,它不只是能簡單的存取數(shù)據(jù),還可以做很多的CURD操作。使用起來和我們用JPA進行關系型數(shù)據(jù)庫的單表操作,幾乎是一樣的。

首先,我們需要在需要操作的java實體類上面加上@RedisHash注解,并使用@Id為該實體類指定id。是不是和JPA挺像的?

@RedisHash("people")   //注意這里的person,下文會說明
public class Person {
  @Id
  String id;
  
  //其他和上一節(jié)代碼一樣

}

然后寫一個PersonRepository ,繼承CrudRepository,是不是也和JPA差不多?

//泛型第二個參數(shù)是id的數(shù)據(jù)類型
public interface PersonRepository extends CrudRepository<Person, String> {
 // 繼承CrudRepository,獲取基本的CRUD操作
}

CrudRepository默認為我們提供了下面的這么多方法,我們直接調(diào)用就可以了。

在這里插入圖片描述

在項目入口方法上加上注解@EnableRedisRepositories(筆者測試,在比較新的版本中這個注解已經(jīng)不需要添加了,默認支持),然后進行下面的測試

@SpringBootTest
public class RedisRepositoryTest {

    @Resource
    PersonRepository personRepository;

    @Test
    public void test(){

        Person rand = new Person("zimug", "漢神");
        rand.setAddress(new Address("杭州", "中國"));
        personRepository.save(rand);  //存

        Optional<Person> op = personRepository.findById(rand.getId()); //取
        Person p2 = op.get();

        personRepository.count(); //統(tǒng)計Person的數(shù)量
        personRepository.delete(rand);  //刪除person對象rand
    }
}

測試結果:需要注意的是RedisRepository在存取對象數(shù)據(jù)的時候,實際上使用了redis的2種數(shù)據(jù)類型

第一種是Set類型,用于保存每一個存入redis的對象(Person)的id。我們可以利用這個Set實現(xiàn)person對象集合類的操作,比如說:count()統(tǒng)計,統(tǒng)計redis數(shù)據(jù)庫中一共保存了多少個person。注意:下圖中set集合的key名稱,就是通過上文代碼中@RedisHash("people") 指定的。

在這里插入圖片描述

第二種是Hash類型,是用來保存Java對象的,id是RedisRepository幫我們生成的,這個id和上圖中set集合中保存的id是一致的。

在這里插入圖片描述

到此這篇關于springboot使用RedisRepository操作數(shù)據(jù)的實現(xiàn)的文章就介紹到這了,更多相關springboot RedisRepository操作內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • Java 爬蟲工具Jsoup詳解

    Java 爬蟲工具Jsoup詳解

    這篇文章主要介紹了 Java 爬蟲工具Jsoup詳解的相關資料,需要的朋友可以參考下
    2017-05-05
  • 解決idea報錯 Connot resolve column 的問題

    解決idea報錯 Connot resolve column 的問題

    這篇文章主要介紹了解決idea報錯 Connot resolve column 的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-02-02
  • java自加和自減運算過程

    java自加和自減運算過程

    這篇文章主要介紹了java自加和自減運算過程,非常不錯,具有參考借鑒價值,需要的朋友可以參考下
    2017-03-03
  • Spring AOP使用@Aspect注解 面向切面實現(xiàn)日志橫切的操作

    Spring AOP使用@Aspect注解 面向切面實現(xiàn)日志橫切的操作

    這篇文章主要介紹了Spring AOP使用@Aspect注解 面向切面實現(xiàn)日志橫切的操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-06-06
  • Java關鍵字final、static使用總結

    Java關鍵字final、static使用總結

    final方法不能被子類的方法覆蓋,但可以被繼承。用static修飾的代碼塊表示靜態(tài)代碼塊,當Java虛擬機(JVM)加載類時,就會執(zhí)行該代碼塊,下面通過本文給大家分享Java關鍵字final、static使用總結,感興趣的朋友一起看看吧
    2017-07-07
  • MyBatis-Plus中自動填充功能的用法示例詳解

    MyBatis-Plus中自動填充功能的用法示例詳解

    有些時候我們可能會有這樣的需求,插入或者更新數(shù)據(jù)時,希望有些字段可以自動填充數(shù)據(jù),比如密碼、version、注冊時默認的用戶角色等,在MP中提供了這樣的功能,可以實現(xiàn)自動填充功能,需要的朋友可以參考下
    2022-12-12
  • IDEA JarEditor編輯jar包方式(直接新增,修改,刪除jar包內(nèi)的class文件)

    IDEA JarEditor編輯jar包方式(直接新增,修改,刪除jar包內(nèi)的class文件)

    文章主要介紹了如何使用IDEA的JarEditor插件直接修改jar包內(nèi)的class文件,而不需要手動解壓、反編譯和重新打包,通過該插件,可以更方便地進行jar包的修改和測試
    2025-01-01
  • Java 過濾器實現(xiàn)敏感詞匯過濾功能

    Java 過濾器實現(xiàn)敏感詞匯過濾功能

    通過使用 Java 過濾器,我們可以輕松地實現(xiàn)敏感詞匯過濾的功能,以保護用戶免受不良內(nèi)容的侵害,讓我們通過一個簡單的示例來演示我們的敏感詞匯過濾器是如何工作的,感興趣的朋友一起看看吧
    2024-01-01
  • 詳解Java正則表達式語法

    詳解Java正則表達式語法

    這篇文章主要介紹了Java正則表達式語法,包括常用正則表達式、匹配驗證-驗證Email是否正確以及字符串中查詢字符或者字符串,感興趣的小伙伴們可以參考一下
    2015-12-12
  • 詳解SpringBoot配置文件啟動時動態(tài)配置參數(shù)方法

    詳解SpringBoot配置文件啟動時動態(tài)配置參數(shù)方法

    這篇文章主要介紹了詳解SpringBoot配置文件啟動時動態(tài)配置參數(shù)方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-11-11

最新評論

巨野县| 昌宁县| 昌黎县| 瓮安县| 秭归县| 五华县| 琼中| 凤台县| 晋宁县| 万宁市| 永登县| 新丰县| 洮南市| 互助| 新泰市| 巍山| 大渡口区| 凤山县| 合山市| 云林县| 襄樊市| 虞城县| 宽城| 凌云县| 新乐市| 临武县| 陕西省| 平乡县| 贵港市| 孙吴县| 丹东市| 辽宁省| 郯城县| 山西省| 香格里拉县| 抚州市| 黔东| 门源| 宜宾县| 汽车| 扬中市|