当前位置: 首页 > news >正文

放心的网站建设代理网站终端制作

放心的网站建设代理,网站终端制作,网站建设工程师职责说明,asp网站后台失效【Spring连载】使用Spring Data访问 MongoDB----对象映射之基于类型的转换器 一、自定义转换二、转换器消歧(Disambiguation)三、基于类型的转换器3.1 写转换3.2 读转换3.3 注册转换器 一、自定义转换 下面的Spring Converter实现示例将String对象转换为自定义Email值对象: R…

【Spring连载】使用Spring Data访问 MongoDB----对象映射之基于类型的转换器

  • 一、自定义转换
  • 二、转换器消歧(Disambiguation)
  • 三、基于类型的转换器
    • 3.1 写转换
    • 3.2 读转换
    • 3.3 注册转换器

一、自定义转换

下面的Spring Converter实现示例将String对象转换为自定义Email值对象:

@ReadingConverter
public class EmailReadConverter implements Converter<String, Email> {public Email convert(String source) {return Email.valueOf(source);}
}

如果你编写的转换器的源类型和目标类型都是native类型,框架无法确定是将其视为读取转换器还是写入转换器。将转换器实例同时注册为两者可能会导致不需要的结果。例如,Converter<String, Long>是不明确的,尽管在写入时尝试将所有String实例转换为Long实例可能没有意义。为了使你能够强制基础结构(infrastructure)仅以一种方式注册转换器,框架提供了在转换器实现中使用的@ReadingConverter和@WritingConverter注解。
转换器需要进行显式注册,因为实例不是从类路径或容器扫描中提取的,以避免向转换服务进行不必要的注册以及此类注册产生的副作用。转换器通过CustomConversions注册,CustomConversion是一个中心设施(facility),允许根据源和目标类型注册和查询已注册的转换器。
CustomConversions附带一组预定义的转换器注册:

  • JSR-310转换器,用于在java.time、java.util.Date和String类型之间转换。

本地时态类型的默认转换器(例如LocalDateTime到java.util.Date)依赖于系统默认时区设置在这些类型之间进行转换。你可以通过注册自己的转换器来覆盖默认转换器。

二、转换器消歧(Disambiguation)

通常,框架检查Converter实现,以确定它们转换的源和目标类型。根据其中一个类型是否是底层数据访问API可以natively处理的类型,框架将转换器实例注册为读转换器或写转换器。下面的例子展示了一个写转换器和一个读转换器(注意区别在于转换器上限定符的顺序):

// Write converter as only the target type is one that can be handled natively
class MyConverter implements Converter<Person, String> {}// Read converter as only the source type is one that can be handled natively
class MyConverter implements Converter<String, Person> {}

三、基于类型的转换器

影响映射结果的最简单方法是通过@Field注解指定所需的native MongoDB目标类型。这允许在域模型中使用非MongoDB类型,如BigDecimal,同时将值持久化为原生org.bson.types.Decimal128格式。
例1:显式目标类型映射

public class Payment {@Id String id;    --------1@Field(targetType = FieldType.DECIMAL128) --------2 BigDecimal value;Date date;        --------3}
{"_id"   : ObjectId("5ca4a34fa264a01503b36af8"), --------1"value" : NumberDecimal(2.099),                 --------2"date"   : ISODate("2019-04-03T12:11:01.870Z")  --------3
}1. 表示有效ObjectId的字符串id值将自动转换。有关详细信息,请参见[映射层中如何处理_id字段](https://blog.csdn.net/gabriel_wang_sh/article/details/136385876#11__id_110)2. 所需的目标类型明确定义为Decimal128,它转换为NumberDecimal。否则,BigDecimal值将被转变为String。
3. 日期值由MongoDB driver本身处理,并存储为ISODate。

上面的代码段非常便于提供简单的类型提示。为了对映射过程获得更细粒度的控制,可以使用MongoConverter实现注册Spring转换器,例如MappingMongoConverter。
在尝试映射对象本身之前,MappingMongoConverter会检查是否有Spring转换器可以处理特定的类。为了“hijack”MappingMongoConverter的正常映射策略,可能是为了提高性能或其他自定义映射需求,你首先需要创建Spring Converter接口的实现,然后将其注册到MappingConverter。
有关Spring类型转换服务的更多信息,请参阅此处的参考文档。

3.1 写转换

下面的例子展示了将Person对象转换为org.bson.Document的Converter的实现:

public class PersonWriteConverter implements Converter<Person, Document> {public Document convert(Person source) {Document document = new Document();document.put("_id", source.getId());document.put("name", source.getFirstName());document.put("age", source.getAge());return document;}
}

3.2 读转换

下面的例子展示了一个转换器的实现,它将一个Document对象转换为一个Person对象:

public class PersonReadConverter implements Converter<Document, Person> {public Person convert(Document source) {Person p = new Person((ObjectId) source.get("_id"), (String) source.get("name"));p.setAge((Integer) source.get("age"));return p;}
}

3.3 注册转换器

class MyMongoConfiguration extends AbstractMongoClientConfiguration {@Overridepublic String getDatabaseName() {return "database";}@Overrideprotected void configureConverters(MongoConverterConfigurationAdapter adapter) {adapter.registerConverter(new com.example.PersonReadConverter());adapter.registerConverter(new com.example.PersonWriteConverter());}
}
http://www.yayakq.cn/news/720757/

相关文章:

  • 电子商务网站建设与管理的实践报告微信公众号移动网站开发
  • 朝阳企业网站建设方案女生做网站前台
  • 深圳网站建设 沙漠风网站怎么上线
  • 合肥网站建设需要多少钱怎么做响应式网站
  • seo和sem推广郑州网站优化费用
  • 网站建设信息科技手机网站一般宽度做多大的
  • 东莞 网站建设企业网站方案建设书
  • 网页设计素材网站知乎阿里云虚拟主机装WordPress
  • 北京seo公司网站建站网址不安全
  • 宜昌高端网站建设重庆网站品牌推广
  • iapp用网站做软件代码wordpress导航源码
  • 如何学好网站建设微软雅黑做网站会涉及到侵权吗
  • 手机营销网站模板免费下载免费咨询男科问题
  • 龙岩网站建设大概费用誉字号网站
  • 兰州新区网站建设济南网站制作公司哪家好
  • 南宁网络推广建站企帮手logo设计官网
  • 城乡建设主管部门官方网站智能识别图片
  • 免费的域名网站网络平台管理制度
  • 温州网站建设推广服务做网站需要准备的资料
  • 怎么做网站反向链接免费网站建设合同范本
  • 网站产品演示北京高端定制网站建设
  • 网站建设与管理技术发展wordpress 删除略缩图
  • 省财政厅经济建设处网站在阿里巴巴做网站多少钱2019
  • 国外建设网站情况报告2345浏览器网址
  • 淘宝客网站哪里可以做网站摸板
  • 软件开发是前端还是后端广州搜索seo网站优化
  • seo发外链的网站临沂seo优化
  • 网站网络推广软件网页设计哪个软件好
  • 做网站一定要购买虚拟主机吗网站规划设计的步骤
  • 连城县住房和城乡建设局 网站请简述网站建设流程图