我是Spring Boot的粉丝,这是Spring Boot上的mongodb示例项目。 大多数mongodb示例项目是如此基础,以至于您不会太过分。 您可以搜索普通的Spring Data示例,但是它们可能比您想要的复杂得多。 所以这是我的。
这是我要使用的pom。

<!--?xml version="1.0" encoding="UTF-8"?-->
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemalocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelversion>4.0.0</modelversion><groupid>caught.co.nr</groupid><artifactid>boottoymongodb</artifactid><version>1.0-SNAPSHOT</version><packaging>war</packaging><!-- Inherit defaults from Spring Boot --><parent><groupid>org.springframework.boot</groupid><artifactid>spring-boot-starter-parent</artifactid><version>1.0.0.BUILD-SNAPSHOT</version></parent><dependencies><dependency><groupid>org.springframework.boot</groupid><artifactid>spring-boot-starter-data-mongodb</artifactid></dependency></dependencies><!-- Needed for fat jar --><build><plugins><plugin><groupid>org.springframework.boot</groupid><artifactid>spring-boot-maven-plugin</artifactid></plugin></plugins></build><repositories><repository><id>spring-snapshots</id><name>Spring Snapshots</name><url>http://repo.spring.io/snapshot</url><snapshots><enabled>true</enabled></snapshots></repository></repositories><pluginrepositories><pluginrepository><id>spring-snapshots</id><url>http://repo.spring.io/snapshot</url></pluginrepository></pluginrepositories>
</project>

我唯一需要的依赖项是“ spring-boot-starter-data-mongodb”,其中包含spring boot mongodb项目的所有必需依赖项。 接下来是我的收藏的模型。 文档注释指向我的收藏集,名为“产品”。 仅当您的型号名称与集合名称不匹配时才需要。 您可以看到一个字段注释,该注释将集合中的字段名称映射到模型的字段名称。

@Document(collection = "products")
public class Product {@Idprivate String id;private String sku;@Field(value = "material_name")private String materialName;private Double price;private Integer availability;public String getId() {return id;}public void setId(String id) {this.id = id;}public String getSku() {return sku;}public void setSku(String sku) {this.sku = sku;}public String getMaterialName() {return materialName;}public void setMaterialName(String materialName) {this.materialName = materialName;}public Double getPrice() {return price;}public void setPrice(Double price) {this.price = price;}public Integer getAvailability() {return availability;}public void setAvailability(Integer availability) {this.availability = availability;}@Overridepublic String toString() {return "Product{" +"id='" + id + '\'' +", sku='" + sku + '\'' +", materialName='" + materialName + '\'' +", price=" + price +", availability=" + availability +'}';}
}

不需要,我们将需要DAO层来操纵我的数据。 如果要在DAO层中使用自动生成的查找方法,MongoRepository是我应该实现的接口。 这些自动生成的方法可以查询模型的每个字段。 有关方法名称语法的完整列表,请参见此处 。 我在下面的查询将使用一个sku名称,并在我的集合中搜索该名称并返回匹配的名称。

public interface ProductRepository extends MongoRepository < Product, String >{public List < Product > findBySku(String sku);
}

现在,我将介绍一个服务,该服务将调用我的DAO接口。 但是请稍等,我没有实现此接口,而是编写了必要的代码以获取模型,对吗? 是的,这些方法是自动生成的,我不需要此接口的实现。

@Service
public class ProductService {@Autowiredprivate ProductRepository repository;public List < Product > getSku(String sku){return repository.findBySku(sku);}
}

接下来,启动我们的Boot示例。 这是我们的主要课程:

@Configuration
@EnableAutoConfiguration
@ComponentScan
public class BootMongoDB implements CommandLineRunner {@Autowiredprivate ProductService productService;private static final Logger logger = LoggerFactory.getLogger(BootMongoDB.class);public void run(String... args) throws Exception {List < Product > sku = productService.getSku("NEX.6");logger.info("result of getSku is {}", sku);}public static void main(String[] args) throws Exception {SpringApplication.run(BootMongoDB.class, args);}
}

如果您连接到mongodb实例,并且sku与您搜索的名称匹配,那么您将看到一个或多个产品。 我们所做的是非常基本的。 如果我要更复杂的查询怎么办? 例如,如果我想要一个特定的SKU,其可用性等于“ 1”? 我不能不使用一些@Query魔术来做到这一点。 所以我要更新我的DAO类。

public interface ProductRepository extends MongoRepository < Product, String >{public List < Product > findBySku(String sku);@Query(value = "{sku: ?0, availability : 1}")public List < Product > findBySkuOnlyAvailables(String sku);
}

我为mongodb提供了直接查询,其中方法签名中的sku将插入查询中的“?0”并将被发送到mongodb。 您可以先更新服务,然后再更新主要方法以查看其是否有效。 如果您对mongodb的语法不太熟悉,那么您可能不喜欢编写可读性不强的查询。 然后是时候添加自定义DAO类了。 除了自动生成的方法外,无法向ProductRepository添加和使用其他方法。 因此,我们将添加几个类,并提供一个不错的精选方法。 我们的存储库类名为“ ProductRepository”。 我们将添加一个名为“ ProductRepositoryCustom”的新接口和一个新方法,该方法将为给定名称找到可用的骨架(findBySkuOnlyAvailables方法的双胞胎)。

public interface ProductRepositoryCustom {public List < Product > findBySkuOnlyAvailablesCustom(String sku);
}

然后为此提供一个实现。 在下面,您看到我们注入了ProductRepositoryCustom的mongotemplate并对其进行了处理。 我们创建两个条件。 第一个用于sku名称,第二个用于可用性。

public class ProductRepositoryImpl implements ProductRepositoryCustom {@Autowiredprivate MongoTemplate mongoTemplate;public List < Product > findBySkuOnlyAvailablesCustom(String sku) {Criteria criteria = Criteria.where("sku").is(sku).
andOperator(Criteria.where("availability").is(1));return mongoTemplate.find(Query.query(criteria), Product.class);}
}

定制实现的最后一步是ProductRepository类的更新。 正如您在下面看到的,我唯一需要的更新是添加了ProductRepositoryCustom,以便我们可以将它们链接在一起。 所有这些命名听起来都有些愚蠢。 但是请注意,尽管自定义接口的名称并不重要,但是实现名称的更改将导致引发异常:

Invocation of init method failed; nested exception is org.springframework.data.mapping.PropertyReferenceException: No property only found for type String! Traversed path: Product.sku.

要解决此问题,请确保实现类的名称为“ ProductRepositoryImpl”,这是扩展MongoRepository和“ Impl”的接口名称的串联。

public interface ProductRepository extends MongoRepository < Product, String>, ProductRepositoryCustom

如果我们将新方法添加到服务层:

@Service
public class ProductService {@Autowiredprivate ProductRepository repository;public List < Product > getSku(String sku){return repository.findBySku(sku);}public List < Product > getAvailableSkuCustom(String sku){return repository.findBySkuOnlyAvailablesCustom(sku);}
}

然后更新我们的主类的run方法:

public void run(String... args) throws Exception {List < Product > sku = productService.getSku("NEX.6");logger.info("result of getSku is {}", sku);List < Product > availableSkuCustom = productService.getAvailableSkuCustom("NEX.6");logger.info("result of availableSkuCustom is {}", availableSkuCustom);}

同样,您必须在日志中看到一些内容! 您可以在github上检查整个项目。

翻译自: https://www.javacodegeeks.com/2014/05/rocking-with-mongodb-on-spring-boot.html

在Spring启动时与mongodb一起摇摆相关推荐

  1. MongoDB和Java(4):Spring Data整合MongoDB(XML配置)

    最近花了一些时间学习了下MongoDB数据库,感觉还是比较全面系统的,涉及了软件安装.客户端操作.安全认证.副本集和分布式集群搭建,以及使用Spring Data连接MongoDB进行数据操作,收获很 ...

  2. spring+springmvc+maven+mongodb

    1.前言 最近项目开发使用到了spring+springmvc+maven+mongodb,项目中的框架是用springboot进项开发的,对于我们中级开发人员来说,有利有弊,好处呢是springbo ...

  3. 架构之路之spring+springmvc+maven+mongodb的搭建(转载:http://blog.csdn.net/tomcat_2014/article/details/55100130)

    1.前言 最近项目开发使用到了spring+springmvc+maven+MongoDB,项目中的框架是用springboot进项开发的,对于我们中级开发人员来说,有利有弊,好处呢是springbo ...

  4. spring 启动加载数据_12个很棒的Spring数据教程来启动您的数据项目

    spring 启动加载数据 Spring Data的任务是为数据访问提供一个熟悉且一致的,基于Spring的编程模型,同时仍保留基础数据存储的特​​殊特征. 它使使用数据访问技术,关系和非关系数据库, ...

  5. spring 启动进度_在Web浏览器中显示Spring应用程序启动的进度

    spring 启动进度 重新启动企业应用程序时,客户打开Web浏览器时会看到什么? 他们什么也没看到,服务器还没有响应,因此Web浏览器显示ERR_CONNECTION_REFUSED 应用程序前面的 ...

  6. MongoDB和Java(5):Spring Data整合MongoDB(注解配置)

    最近花了一些时间学习了下MongoDB数据库,感觉还是比较全面系统的,涉及了软件安装.客户端操作.安全认证.副本集和分布式集群搭建,以及使用Spring Data连接MongoDB进行数据操作,收获很 ...

  7. 使用Spring Data访问MongoDB数据库

    本文将引导我们如何使用Spring Data MongoDB构建应用程序,并使用应用程序在MongoDB(基于文档的数据库)中存储数据与检索数据. 需要新建什么 我们要使用Spring Data Mo ...

  8. 了解这些,你就可以在Spring启动时为所欲为了

    点击上方蓝色"方志朋",选择"设为星标" 回复"666"获取独家整理的学习资料! Spring 是一个控制反转依赖管理的容器,作为 Java ...

  9. 6.3 Spring Boot集成mongodb开发

    6.3 Spring Boot集成mongodb开发 本章我们通过SpringBoot集成mongodb,Java,Kotlin开发一个极简社区文章博客系统. 0 mongodb简介 Mongo 的主 ...

最新文章

  1. Autoware安装和快速使用
  2. ML:MLOps系列讲解之《端到端 ML工作流生命周期》解读
  3. 1.9 Java 9增强的自动资源管理
  4. 开始使用Python编程
  5. 聊聊研读论文有哪些经验之谈?
  6. 魅族魅蓝5s详细开启Usb调试模式的流程
  7. Bluetooth的profile总结
  8. 系统分析与设计课程总结
  9. 论文笔记之RL优化——高斯平滑的Q函数
  10. 硕士研究生计算机专业录取分数线,全国所计算机研究生录取分数线.doc
  11. 浅谈Python爬虫(四)【英雄联盟人物背景故事爬取】
  12. Zoned-Storage - 对ZNS块设备进行基准测试
  13. 如何入门网络爬虫,摸索一年的心里路程
  14. virtualbox 不能为虚拟电脑打开一个新任务/VT-x features locked or unavailable in MSR.
  15. 分布式系统监控软件zabbix—— 通过qqmail或第三方报警平台(睿象云)发送告警信息
  16. android系统电视升级包下载地址,海美迪HD600A四代官方固件ROM升级包下载_升级教程...
  17. Linux服务器间文件夹监控同步文件脚本
  18. 基于 HTML5 的 WebGL 3D 版俄罗斯方块
  19. 目标既定 使命必达 | 麒麟信安举行营销中心2023年度工作计划部署会
  20. ITeye 你是怎么了?

热门文章

  1. 自定义SpringBoot的运行动画---美女
  2. 利用session防止表单重复提交
  3. 什么是无监督学习(监督学习,半监督学习,无监督聚类)?
  4. 开发罪过_七大罪过与如何避免
  5. java streams_使用Stream.peek在Java Streams内部进行窥视
  6. jooq_jOOQ星期二:拉斐尔·温特豪德(Rafael Winterhalter)正在与字节好友合作字节码...
  7. apache.camel_Apache Camel 2.16发布–十大亮点
  8. sts集成jboss_与JBoss BPM Travel Agency更新了Modern BPM数据集成
  9. netflix_Netflix Archaius用于物业管理–基础知识
  10. HttpClient 4 API –获取状态码-getStatusLine()。getStatusCode()示例