【Spring連載】使用Spring Data訪問 MongoDB----對象映射之屬性轉換器

【Spring連載】使用Spring Data訪問 MongoDB----對象映射之屬性轉換器

  • 一、聲明式值轉換器
  • 二、編程式值轉換器注冊
  • 三、MongoCustomConversions配置

雖然基于類型的轉換已經提供了影響目標存儲中某些類型的轉換和表示的方法,但當僅考慮特定類型的某些值或屬性進行轉換時,它會受到限制。基于屬性的轉換器允許以聲明方式(通過@ValueConverter)或編程方式(通過為特定屬性注冊PropertyValueConverter)按每個屬性配置轉換規則。
PropertyValueConverter可以將給定值轉換為其存儲表示形式(寫入)和返回(讀取),如下所示。額外的ValueConversionContext提供了額外的信息,例如映射元數據和直接讀寫方法。
例1:一個簡單的PropertyValueConverter

class ReversingValueConverter implements PropertyValueConverter<String, String, ValueConversionContext> {@Overridepublic String read(String value, ValueConversionContext context) {return reverse(value);}@Overridepublic String write(String value, ValueConversionContext context) {return reverse(value);}
}

你可以通過委托給PropertyValueConversions,通常通過使用PropertyValueConverterFactory來提供實際的轉換器,從CustomConversions#getPropertyValueConverter(…)獲得PropertyValueConverter實例。根據應用程序的需要,可以鏈接(chain)或裝飾(decorate)PropertyValueConverterFactory的多個實例?—?例如應用caching。默認情況下,Spring Data MongoDB使用緩存實現,該實現可以為具有默認構造函數或枚舉值的類型提供服務。一組預定義的工廠可通過PropertyValueConverterFactory中的工廠方法獲得。你可以使用PropertyValueConverterFactory.beanFactoryAware(…)從ApplicationContext獲取PropertyValueConverter實例。
你可以通過ConverterConfiguration更改默認行為。

一、聲明式值轉換器

PropertyValueConverter最直接的用法是用@ValueConverter注釋屬性,該注釋定義了轉換器類型:例2:聲明式PropertyValueConverter

class Person {@ValueConverter(ReversingValueConverter.class)String ssn;
}

二、編程式值轉換器注冊

編程式注冊通過使用PropertyValueConverterRegistrar為實體模型中的屬性注冊PropertyValueConverter實例,如下面的示例所示。聲明性注冊和編程式注冊的區別在于編程式注冊完全發生在實體模型之外。如果不能或不想注解實體模型,這種方法很有用。
例3:編程式PropertyValueConverter注冊

PropertyValueConverterRegistrar registrar = new PropertyValueConverterRegistrar();registrar.registerConverter(Address.class, "street", new PropertyValueConverter() {}); --------1// type safe registration
registrar.registerConverter(Person.class, Person::getSsn())                               --------2.writing(value -> encrypt(value)).reading(value -> decrypt(value));1. 為由其名稱標識的字段注冊一個轉換器。
2. 允許注冊轉換器及其轉換函數的類型安全變量。此方法使用類代理來確定屬性。確保類和訪問器都不是final,否則此方法不起作用。

在注冊轉換器時,不支持通過點表示法(如registerConverter(Person.class, “address.street”, …))將屬性轉換為子文檔。MongoValueConverter提供了一個預類型化的PropertyValueConverter接口,它使用了MongoConversionContext。

三、MongoCustomConversions配置

默認情況下,MongoCustomConversions可以處理聲明式值轉換器,具體取決于配置的PropertyValueConverterFactory。MongoConverterConfigurationAdapter幫助設置可編程的值轉換或定義要使用的PropertyValueConverterFactory。
例4:配置示例

MongoCustomConversions.create(configurationAdapter -> {SimplePropertyValueConversions valueConversions = new SimplePropertyValueConversions();valueConversions.setConverterFactory();valueConversions.setValueConverterRegistry(new PropertyValueConverterRegistrar().registerConverter().buildRegistry());configurationAdapter.setPropertyValueConversions(valueConversions);
});

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

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

相關文章

js中Generator函數詳解

定義&#xff1a; promise是為了解決回調地獄的難題出現的&#xff0c;那么 Generator 就是為了解決異步問題而出現的。 普通函數&#xff0c;如果調用它會立即執行完畢&#xff1b;Generator 函數&#xff0c;它可以暫停&#xff0c;不一定馬上把函數體中的所有代碼執行完畢…

Linux基本指令(下)

目錄 1. less指令 2. head與tail指令 3. find指令 示例 4. grep指令 示例 ?編輯 5. zip/unzip 打包與壓縮 示例 ?編輯 6. tar指令 7. find指令&#xff1a; -name 8. echo指令 9. 時間相關的指令 1.在顯示方面&#xff0c;使用者可以設定欲顯示的格式&#xff…

分布式ID(6):Redis實現分布式ID生成

Redis是一個高性能的鍵值數據庫,它可以用于生成分布式唯一標識符。需要注意的是Redis實現ID可以用,這也是很多公司的選擇。但是在redis服務器宕機的情況下,他也可能會出現重復生成ID的情況。 1 實現原理 利用Redis的原子操作:Redis提供了原子性的INCR和INCRBY命令,可用于…

使用python或AI自動分析數據關聯(簡介)

有一些Python庫可以幫助用戶自動發現數據集中的關聯關系。通常這類方法被稱為關聯分析或關聯規則挖掘&#xff0c;其中最著名的算法是Apriori和FP-Growth。 兩個算法 Apriori算法&#xff1a; 這是一個用于頻繁項集挖掘和關聯規則學習的經典算法。Python中的mlxtend庫提供了一…

【機器學習】有監督學習算法之:K最近鄰

K最近鄰 1、引言2、決策樹2.1 定義2.2 原理2.3 實現方式2.3.1 距離度量2.3.2 K值的選擇 2.4 算法公式2.5 代碼示例 3、總結 1、引言 小屌絲&#xff1a;魚哥&#xff0c; 這么長時間沒更新了&#xff0c;是不是得抓緊時間了。 小魚&#xff1a;最近可都是在忙的呢&#xff0c;…

已解決ResponseEntityException的Spring MVC異常響應實體異常的正確解決方法,親測有效!!!

由于ResponseEntityException并非Spring框架中明確定義的異常類&#xff0c;我推斷這里可能指的是在使用ResponseEntity時遇到的常見異常或錯誤。因此&#xff0c;我將根據這個假設&#xff0c;提供一個解決Spring MVC中與ResponseEntity相關異常的通用方法指南。 目錄 問題分…

線上歷史館藏系統 Java+SpringBoot+Vue+MySQL

??計算機編程指導師 ??個人介紹&#xff1a;自己非常喜歡研究技術問題&#xff01;專業做Java、Python、微信小程序、安卓、大數據、爬蟲、Golang、大屏等實戰項目。 ??實戰項目&#xff1a;有源碼或者技術上的問題歡迎在評論區一起討論交流&#xff01; ?? Java實戰 |…

day09_商品管理訂單管理SpringTaskEcharts

文章目錄 1 商品管理1.1 添加功能1.1.1 需求說明1.1.2 核心概念SPUSKU 1.1.3 加載品牌數據CategoryBrandControllerCategoryBrandServiceCategoryBrandMapperCategoryBrandMapper.xml 1.1.4 加載商品單元數據ProductUnitProductUnitControllerProductUnitServiceProductUnitMap…

詳解java中的Lambda表達式

Lambda表達式的前世今生&#xff08;來歷與概述&#xff09; Lambda表達式的前世------匿名類 以往&#xff0c;使用單一抽象方法的接口被用作函數類型。 它們的實例表示函數&#xff08;functions&#xff09;或行動&#xff08;actions&#xff09;。 自從 JDK 1.1 于 1997…

【MySQL】超詳細-基礎操作

數據庫定義 數據庫是一類軟件&#xff0c;用來管理數據&#xff0c;組織數據&#xff1b; 關系型數據庫MySQL&#xff08;Oracle,SQL Server,SQLite&#xff09;以表格形式組織數據&#xff0c;數據格式要求嚴格&#xff1b;非關系型數據庫Redis&#xff08;MongoDB,HBase&…

數據結構與算法-冒泡排序

引言 在數據結構與算法的世界里&#xff0c;冒泡排序作為基礎排序算法之一&#xff0c;以其直觀易懂的原理和實現方式&#xff0c;為理解更復雜的數據處理邏輯提供了堅實的入門階梯。盡管在實際應用中由于其效率問題不常被用于大規模數據的排序任務&#xff0c;但它對于每一位初…

【C++】set、multiset與map、multimap的使用

目錄 一、關聯式容器二、鍵值對三、樹形結構的關聯式容器3.1 set3.1.1 模板參數列表3.1.2 構造3.1.3 迭代器3.1.4 容量3.1.5 修改操作 3.2 multiset3.3 map3.3.1 模板參數列表3.3.2 構造3.3.3 迭代器3.3.4 容量3.3.5 修改操作3.3.6 operator[] 3.4 multimap 一、關聯式容器 談…

Hololens 2應用開發系列(1)——使用MRTK在Unity中設置混合現實場景并進行程序模擬

Hololens 2應用開發系列&#xff08;1&#xff09;——使用MRTK在Unity中進行程序模擬 一、前言二、創建和設置MR場景三、MRTK輸入模擬的開啟 一、前言 在前面的文章中&#xff0c;我介紹了Hololens 2開發環境搭建和項目生成部署等相關內容&#xff0c;使我們能生成一個簡單Ho…

Redis 之九:Spring Data Redis -- Redis Template 用法

SpringData Redis Spring Data Redis 是 Spring Data 項目的一部分&#xff0c;它為 Java 應用程序提供了一種便捷的方式來與 Redis 數據庫進行交互。 Spring Data Redis 提供了對 Redis 的抽象封裝&#xff0c;使得開發者能夠以面向對象的方式操作 Redis&#xff0c;并簡化了 …

matlab 寫入格式化文本文件

目錄 一、save函數 二、fprintf函數 matlab 寫入文本文件可以使用save和fprintf函數 save輸出結果: fprintf輸出結果: 1.23, 2.34, 3.45 4.56, 5.67, 6.78 7.89, 8.90, 9.01 可以看出fprintf輸出結果更加人性化,符合要求,下面分別介紹。 一、save函數 …

linux系統Jenkins工具介紹

Jenkins概念介紹 Jenkins概念Jenkins目的特性產品發布流程 Jenkins概念 Jenkins是一個功能強大的應用程序&#xff0c;允許持續集成和持續交付項目&#xff0c;無論用的是什么平臺。這是一個免費的源代碼&#xff0c;可以處理任何類型的構建或持續集成。集成Jenkins可以用于一些…

MQL5-MT5連接上國內期貨

主要原因是昨天在學習MACD時發現給的基礎代碼感覺不對&#xff0c;但無法證明&#xff0c;因為MT5接的都是外匯交易&#xff0c;數據和國內的文華啥的全對不上&#xff0c;便找了一些國內接CTP的&#xff0c;直接寫代碼有點麻煩&#xff0c;雖然之前對接過國內CTP的東西&#x…

AI入門筆記(三)

神經網絡是如何工作的 神經網絡又是如何工作的呢&#xff1f;我們用一個例子來解釋。我們看下面這張圖片&#xff0c;我們要識別出這些圖片都是0并不難&#xff0c;要怎么交給計算機&#xff0c;讓計算機和我們得出同樣的結果&#xff1f;難點就在于模式識別的答案不標準&…

十二、Nacos源碼系列:Nacos配置中心原理(四)- RefreshEvent 事件處理

前面文章&#xff0c;我們說到回調監聽器的方法中&#xff0c;主要就是發布了一個RefreshEvent事件&#xff0c;這個事件主要由 SpringCloud 相關類來處理。今天我們繼續分析后續的流程。 RefreshEvent 事件會由 RefreshEventListener 來處理&#xff0c;該 listener 含有一個 …

Object類方法

toString(): 返回對象的字符串表示形式。默認情況下&#xff0c;返回對象的類名和哈希碼的十六進制表示。 equals(Object obj): 比較兩個對象是否相等。默認情況下&#xff0c;這個方法比較的是兩個對象的引用是否相同&#xff0c;但是通常會在子類中重寫這個方法以實現自定義…