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

赤峰网站制作公司全球最顶尖的设计公司

赤峰网站制作公司,全球最顶尖的设计公司,河北房地产网站建设,网站建设最新时讯MongoDB推荐使用ObjectId作为主键#xff0c;但国内的开发都知道#xff0c;事情往往不如人所愿#xff0c;当我们真的出现了“_id”主键的类型为String时#xff0c;且还必须想用mongoTemplate.findOne或findList时#xff0c;直接使用该方法会导致查询结果为空。 因为m…MongoDB推荐使用ObjectId作为主键但国内的开发都知道事情往往不如人所愿当我们真的出现了“_id”主键的类型为String时且还必须想用mongoTemplate.findOne或findList时直接使用该方法会导致查询结果为空。 因为mongoTemplate会在查询的时候将主键转换为ObjectId。 实际上这一步转换是MappingMongoConverter中做的源码如下 /*** Converts the given raw id value into either {link ObjectId} or {link String}.** param id can be {literal null}.* param targetType must not be {literal null}.* return {literal null} if source {literal id} is already {literal null}.* since 2.2*/ Nullabledefault Object convertId(Nullable Object id, Class? targetType) {if (id null || ClassUtils.isAssignableValue(targetType, id)) {return id;}if (ClassUtils.isAssignable(ObjectId.class, targetType)) {if (id instanceof String) {if (ObjectId.isValid(id.toString())) {return new ObjectId(id.toString());}// avoid ConversionException as convertToMongoType will return String anyways.return id;}}try {return getConversionService().canConvert(id.getClass(), targetType)? getConversionService().convert(id, targetType): convertToMongoType(id, (TypeInformation?) null);} catch (ConversionException o_O) {return convertToMongoType(id,(TypeInformation?) null);}} 注意示例版本为spring-data-mongodb:3.3.5一些更古早的版本如2.1.9需要重写其他部分如果有人需要请留言我会抽时间补充但鉴于之前的版本有比较重大的漏洞所以推荐升级版本。 if (ObjectId.isValid(id.toString())) { return new ObjectId(id.toString()); } 这段就是mongoTemplate将String转换为ObjectId的步骤。 所以我们要做的就是重写这部分并且替换掉原有的 1、新建一个Converter public class MyMongoConverter extends MappingMongoConverter {public MyMongoConverter(DbRefResolver dbRefResolver, MappingContext? extends MongoPersistentEntity?, MongoPersistentProperty mappingContext) {super(dbRefResolver, mappingContext);}Overridepublic Object convertId(Nullable Object id, Class? targetType) {if (id null || ClassUtils.isAssignableValue(targetType, id)) {return id;}if (ClassUtils.isAssignable(ObjectId.class, targetType)) {if (id instanceof String) {return id;}}try {return getConversionService().canConvert(id.getClass(), targetType)? getConversionService().convert(id, targetType): convertToMongoType(id, (TypeInformation?) null);} catch (ConversionException o_O) {return convertToMongoType(id,(TypeInformation?) null);}} } 2、在构建MongoTemplate时用我们自己写的替换 MongoTemolate mongoTemplate new MongoTemplate(mongoDbFactory(), getDefaultMongoConverter(mongoDbFactory()))protected static MongoConverter getDefaultMongoConverter(MongoDatabaseFactory factory) {DbRefResolver dbRefResolver new DefaultDbRefResolver(factory);MongoCustomConversions conversions new MongoCustomConversions(Collections.emptyList());MongoMappingContext mappingContext new MongoMappingContext();mappingContext.setSimpleTypeHolder(conversions.getSimpleTypeHolder());mappingContext.afterPropertiesSet();MyMongoConverter converter new MyMongoConverter(dbRefResolver, mappingContext);converter.setCustomConversions(conversions);converter.afterPropertiesSet();converter.setTypeMapper(new DefaultMongoTypeMapper(null));return converter;}/*** return {link MongoDatabaseFactory}*/protected MongoDatabaseFactory mongoDbFactory() {ServerAddress serverAddress new ServerAddress(host, port);MongoClientSettings.Builder setting MongoClientSettings.builder().applyToClusterSettings(builder - builder.hosts(Collections.singletonList(serverAddress))).retryWrites(false);if (ObjectUtil.isNotEmpty(username)) {MongoCredential credential MongoCredential.createCredential(username, authenticationDatabase, password.toCharArray());setting.credential(credential);}MongoClient mongoClient MongoClients.create(setting.build());return new SimpleMongoClientDatabaseFactory(mongoClient, database);} host,port,username,authenticationDatabase,password,database 分别为MongoDB的地址端口号用户名认证数据库密码数据库名
http://wiki.neutronadmin.com/news/251457/

相关文章:

  • 微网站建设微网站建设移动网站推广
  • 河池环江网站建设中国铁建门户网登录入口
  • 有没有做专利导航运营的网站中建招聘官网入口
  • 高端品牌网站建设兴田德润在哪儿重庆市建设工程信息
  • 网站设计技术有哪些?wordpress连接pgsql
  • 网站的标题与关键词中美关系最新消息
  • 建设网站的具体步骤是什么百度助手app免费下载
  • 化妆品公司的网站建设的利益分析市场调研报告模板
  • 青海网站seo有哪些做排球比赛视频网站
  • 贵阳花溪建设村镇银行官方网站医院网站建设水平
  • dedecms学校网站模板怎么把文件放到网站的根目录
  • 网站seo怎么填写搜索引擎优化方法包括
  • 什么是优化资源配置福州外包seo公司
  • 科技网站配色方案公司变更地址需要多少钱
  • 单页网站开发实例下载注册号域名后 怎么建设网站
  • 阿里云做网站视频无法播放网站运营阶段
  • 扬州天达建设集团有限公司网站客户为什么需要建站服务
  • 正安县住房和城乡建设局网站wordpress转域名收费
  • 长沙网站定制济南旅游网页设计
  • 网站怎么做seo优化啊wordpress 怎么使用
  • 手机购物网站源码自己制作广告图片软件
  • 网站建设系网页设计跟网站建设的区别
  • 网站网站做代理网站建设 论文
  • 做网站的论坛网站怎样制作 优帮云
  • 郑州商城网站建设重庆城乡建设网站首页
  • 一个工厂做网站有用吗asp网站建设软件
  • 怎么给网站做seo优化德惠网站
  • 广州网站设计成功柚米怎么做才能让网站人气提升
  • 建设银行车贷网站南京哪里可以做网站
  • 怎么新增网站推广windows优化大师有必要安装吗