sql >> Database >  >> NoSQL >> MongoDB

Spring Boot gebruiken met MongoDB

Spring Boot is een op Java gebaseerd open-source framework voor het maken van microservices, waarmee ontwikkelaars services onafhankelijk kunnen implementeren en ontwikkelen. Elke lopende service heeft zijn eigen proces, waardoor het lichtgewicht model wordt bereikt dat zakelijke toepassingen ondersteunt. Microservices hebben verschillende voordelen:eenvoudige schaalbaarheid, minimale configuratie, kortere productietijd, containercompatibiliteit en eenvoudige ontwikkeling.

Spring boot biedt een goed platform voor ontwikkelaars om stand-alone en productieklare spring-applicaties te bouwen die je gewoon kunt uitvoeren; dus kan men aan de slag met minimale configuraties zonder dat een volledige configuratie van de veerconfiguratie nodig is.

Het omgaan met afhankelijkheidsbeheer is bijvoorbeeld complex voor grote projecten; Spring Boot lost dit probleem dus op door een reeks afhankelijkheden te bieden voor het gemak van de ontwikkelaar. De Spring Boot-toepassing scant alle bonen en pakketdeclaraties wanneer de toepassing wordt geïnitialiseerd; Bovendien bevat de annotatie van de Spring Boot-toepassing componentenscan, autoconfiguratie en Spring Boot-configuratie.

Kenmerken van Spring Boot

Hieronder staan ​​enkele van de standaardfuncties van spring-boot:

  1. Het configureert automatisch de Spring- en 3rd party-bibliotheken indien mogelijk
  2. Het biedt eigenzinnige 'starter'-afhankelijkheden om uw buildconfiguratie te vereenvoudigen
  3. Het vereist geen XML-configuratie en geen codegeneratie
  4. Bovendien biedt het productieklare functies zoals externe configuratiestatistieken en statuscontroles
  5. Het heeft een ingesloten Tomcat, Undertow direct of Jetty; het is dus niet nodig om WAR-bestanden te implementeren
  6. Het maakt ook stand-alone Spring-applicaties

Voordelen van Spring Boot voor ontwikkelaars

  1. Het verhoogt de productiviteit
  2. Het maakt het gemakkelijk om lente-applicaties te ontwikkelen en te begrijpen
  3. Het vermindert de tijdontwikkeling.

 Doelstellingen van de Spring Boot

Het is ontworpen om:

  1. Ontwikkel op een eenvoudigere manier productieklare veertoepassingen
  2. Vermijd complexe XML-configuratie in de lente
  3. Verkort de ontwikkeltijd en voer de applicatie zelfstandig uit
  4. Bied een eenvoudigere manier aan om met de applicatie aan de slag te gaan.

De Spring Boot heeft meer de voorkeur vanwege de functies en voordelen die het biedt, zoals:

  1. Verstrekking van een krachtige batchverwerking en beheer van REST-eindpunten
  2. Het bieden van een flexibelere manier om gegevenstransacties, Java Beans j en XML-configuraties te configureren.
  3. Biedt annotaties op basis van lentetoepassingen
  4. Vereenvoudigt afhankelijkheidsbeheer, het bevat een ingebouwde Servlet-container
  5. Er zijn geen handmatige configuraties nodig omdat alles in Spring Boot automatisch wordt geconfigureerd

MongoDB is een bron-beschikbaar, platformonafhankelijk, documentgericht databaseprogramma. Het is een documentendatabase die een hoge schaalbaarheid en flexibiliteit van programma's biedt. Bovendien biedt het gebruikers snelle query's en indexering, wat op de lange termijn de prestaties verbetert.

MongoDB is geclassificeerd als een NoSQL-databaseprogramma en gebruikt JSON-achtige documenten met optionele en flexibele schema's. Deze database is ontwikkeld door MongoDB Inc., een in Amerika gevestigd bedrijf dat commerciële ondersteuning ontwikkelt en levert voor de bron-beschikbare database. MongoDB is gelicentieerd onder de Server-Side Public License (SSPL).

MongoDB heeft zijn functies voortdurend verbeterd, bijvoorbeeld door de voortdurende ontwikkeling van versies;

DATUM VERSIE FUNCTIE OPMERKING
December 2009 1.2 Opgeslagen JavaScript-functies
Sneller aanmaken van indexen
Meer indexen per verzameling
Configureerbare synchronisatietijd
Verschillende kleine functies en oplossingen
Augustus 2010 1.6 Kaart/verkleinen
Replica sets
Productieklare sharding
Ondersteuning voor IPv6
Maart 2013 2.4 Gehashte index
Overschakelen naar V8 JavaScript-engine
Verbeterde geospatiale ondersteuning
Geavanceerd zoeken naar tekst
Beveiligingsverbeteringen
8 april 2014 2.6 Query-engine verbeteringen
Aggregatieverbeteringen
Beveiligingsverbeteringen
Nieuw schrijfbewerkingsprotocol
Tekst-zoekintegratie
3 maart 2015 3.0 Verbeterde uitlegfunctionaliteit
Inplugbare API voor opslagengine
MongoDB Ops Manager
Ondersteuning voor bekabelde Tiger-opslagengine
SCRAM-SHA-1 authenticatie
8 december 2015 3.2 Verbeteringen voor replicatieverkiezingen
Documentvalidaties
Standaard bekabelde Tiger-opslagengine
Servers configureren als replicasets
Verplaatst van V8 naar Spider Monkey
Documentvalidaties
Bezorgdheid lezen
29 november 2016 3.4 Collatie, lineaire leesproblemen en weergaven
Juni 2018 4.0 Verbeterde transacties
13 juli 2021 5.0 Encryptie op veldniveau aan clientzijde
Toekomstbestendige API met versiebeheer
Tijdreeksondersteuning
Live resharding houdt in dat de toewijzingen van object-shards worden gewijzigd en dat het object naar een andere shard wordt verplaatst.

Snelle en gemakkelijke stand-alone apps kunnen worden gemaakt met behulp van Spring Boot (zoals we later zullen zien). Als gevolg van het gebruiksgemak is MongoDB de populairste NoSQL-database geworden. Door Spring Boot en MongoDB te combineren, kan snel, veilig, betrouwbaar en minimale ontwikkeltijd worden gecreëerd.

Dit artikel laat zien hoe je de Spring Data MongoDB API gebruikt om Spring Boot te combineren met MongoDB.

Spring Boot gebruiken met MongoDB

De Spring Boot is een op microservices gebaseerd webframework dat automatisch wordt geconfigureerd en ingebouwde beveiligings- en databasetoegangsfuncties kan bieden. Zo kan de Spring-boot snel een stand-alone applicatie maken zonder configuratiewijzigingen. Aan de andere kant is MongoDB de meest populaire NoSQL-database omdat het gemakkelijk gegevens kan opslaan en ophalen. De combinatie van Spring Boot en MongoDB resulteert in veilige, snelle en betrouwbare applicaties die een minimale ontwikkeltijd vereisen.

Spring Boot maakt snelle productieklare applicaties. MongoDB en Spring Boot werken samen met behulp van de Mongo Template-klasse en de Mongo Repository-interface.

  • Mongo-sjabloon — het implementeert een set kant-en-klare API's. Een goede keuze voor bewerkingen zoals update-aggregaties, onder andere; bovendien biedt Mongo Template meer verfijnde controle over aangepaste zoekopdrachten.
  • Mongo-opslagplaats wordt gebruikt voor basisvragen waarbij veel documentvelden betrokken zijn, zoals het bekijken van documenten en het maken van gegevens.

Spring Boot MongoDB-configuratie die beide benaderingen gebruikt, heeft slechts een paar regels code nodig.

De Spring Boot is een applicatieframework voor Java-webapplicaties op basis van het MVC-framework (Model-View-Controller). De afhankelijkheidsinjectie verwerkt functies zoals databasebeveiliging, toegang en initialisatie, waardoor ontwikkelaars zich kunnen concentreren op de bedrijfslogica. Het is ook gebouwd bovenop het Spring-framework, voornamelijk voor REST-API's en vereist zeer weinig configuraties. Het heeft vier lagen:

De presentatielaag — Het weergavegedeelte van het MVC-framework zorgt voor de front-end.

De bedrijfslaag is de controller waar alle bedrijfslogica en validaties worden uitgevoerd.

Persistentielaag — Deze laag vertaalt de bedrijfsobjecten naar databaseobjecten.

Databaselaag — De feitelijke CRUD-bewerkingen (maken, lezen, bijwerken, verwijderen).

MongoDB is een snelle database die enorme hoeveelheden georganiseerde en ongestructureerde gegevens kan verwerken, waardoor het ideaal is voor webtoepassingen. MongoDB slaat gegevens op als binaire JSON-objecten, wat het ophalen van gegevens vereenvoudigt. Het Spring-framework bevat robuuste connectoren die efficiënte databasebewerkingen met MongoDB mogelijk maken.

We houden ons alleen bezig met de Persistence- en Database-lagen in deze Spring Boot with MongoDB-voorbeeldtutorial. We zullen onze software uitvoeren via een Integrated Development Environment (IDE) om een ​​sterke nadruk op CRUD-activiteiten te behouden. Om Spring Boot en MongoDB te verbinden, voegen we Spring Boot MongoDB-configuraties toe.

Wat we in dit voorbeeld gaan construeren

Laten we een fictieve boodschappenlijst van een gebruiker ontwikkelen. We zullen de volgende procedures uitvoeren:

  1. In onze Spring-toepassing definiëren we een kruidenierswaren-item Plain Old Java Object (POJO) met een ID, een naam, een hoeveelheid en een categorie.
  2. Daarna voeren we acties voor het maken, lezen, bijwerken en verwijderen (CRUD) uit via de openbare interface van MongoRepository.
  3. Ten slotte demonstreren we een andere methode voor het wijzigen van documenten door gebruik te maken van de MongoTemplate-klasse.

Vereisten

We hebben nodig:

  • Cluster MongoDB Atlas (als je nog geen account hebt, meld je dan gratis aan voordat je doorgaat naar de volgende fase).
  • Lente initializr
  • Java 1.8
  • Maven (installeer Maven door naar "Help -> Installeer nieuwe software" in Eclipse te gaan).
  • Een geïntegreerde ontwikkelomgeving (IDE) importeert de essentiële bibliotheken en afhankelijkheden. De Eclipse wordt gebruikt voor deze projectillustratie.

Maak om te beginnen een Spring Boot-project met de volgende instellingen met Spring Initializr:

Kies Maven Project met Java (8) als programmeertaal en Spring Boot 2.5.3 als versie. Voeg daarnaast Spring Web- en Spring Data MongoDB-afhankelijkheden toe. Spring Web integreert de Apache Tomcat-server, Spring MVC en REST in uw applicatie om het beheer van alle veelvoorkomende afhankelijkheden te centraliseren.

We gebruiken de Spring Data MongoDB-afhankelijkheid om toegang te krijgen tot gegevens van ons MongoDB Atlas-cluster in deze applicatie.

Voer de metadata voor het project in (zoals hierboven geïllustreerd) en kies de JAR-optie. De Spring Initializr beheert het maken van pom.xml-bestanden, terwijl Maven de vereiste afhankelijkheden downloadt via pom.xml.

Hiermee zijn onze voorbereidingen voor de instellingen voltooid. Daarna kunnen we op de knop Genereren klikken om alle bestanden te genereren die nodig zijn om het Spring Boot-project op te starten. Daarna zal de browser automatisch een ZIP-bestand downloaden.

Pak het project uit nadat u het ZIP-bestand hebt gedownload. Open het project vanuit de IDE. U kunt een voorbeeld van een soortgelijke projectstructuur zien:

Zoals we kunnen zien, zijn de afhankelijkheden die we hebben toegevoegd opgenomen in het pom.xml-bestand als artifactId:

Het is tijd om de submap src/main/java te vullen met inhoud.

Implementatie van het MongoDB-model

De klasse POJO of GroceryItem dient hier als ons model.

Maak een pakket met de naam "com.example.mdbspringboot.model" en voeg de klasse GroceryItem.java erin toe.

De annotatie @Document wordt gebruikt om de collectienaam op te geven die het model zal gebruiken. MongoDB maakt de verzameling aan als deze nog niet bestaat.

We kunnen getters en setters voor deze code genereren door de optie Eclipse Source -> Generate Getters and Setters te gebruiken. Gebruik eerst de @Id-annotatie om de primaire sleutel _id van het MongoDB-document op te geven. MongoDB zal automatisch een _id-veld produceren wanneer het document wordt gemaakt als we niets specificeren.

Implementatie van de MongoDB API in Spring Boot

De repository is waar de API wordt geïmplementeerd. Het dient als een brug tussen de database en het model en biedt toegang tot alle CRUD-activiteiten.

Maak een pakket met de naam 'com.example.mdbspringboot.repository' om alle repositorybestanden te bevatten.

We creëren een openbare interface voor ItemRepository die de MongoRepository-interface uitbreidt.

De eerste benadering, findItemByName, vereist een queryargument, dat het veld specificeert waarop de query moet worden gefilterd. Dit wordt gespecificeerd met behulp van de annotatie @Query. De tweede techniek maakt gebruik van het categorieveld om alle objecten op te halen die tot een specifieke categorie behoren. We willen alleen de naam en het nummer van het veld dat wordt geprojecteerd in het antwoord op de vraag; daarom stellen we die velden in op 1. We passen de methode count() opnieuw toe in zijn huidige staat.

Voorbeelden van MongoDB met Spring Boot CRUD

We zijn nu klaar om onze Spring Application te ontwikkelen en de methoden te testen.

Om naar MongoDB Atlas te linken, definiëren we de verbindingsreeks in het bestand application.properties van de map src/main/resources. De verbindingsreeks van het cluster is toegankelijk in de gebruikersinterface van Atlas. Er is geen ander bestand vereist om verbindingsgerelateerde code op te nemen. Spring Boot beheert namens ons de databaseverbinding.

Bovendien specificeren we hier de databasenaam - MongoDB zal er een maken als deze niet bestaat.

We gebruiken de Controller of de View niet in dit Spring Boot MongoDB-voorbeeld. In plaats daarvan gebruiken we een CommandLineRunner om de uitvoer op de console te bekijken.

Maak de hoofdklasse MdbSpringBootApplication.java in het rootpakket com.example.mdbspringboot:

Om de lente-applicatie uit te voeren, gebruikt onze klasse MdbSpringBootApplication de CommandLineRunner-interface. ItemRepository is Autowired, wat betekent dat Spring het automatisch zal ontdekken. De annotatie @SpringBootApplication wordt gebruikt om de toepassingscontext te initialiseren. Daarnaast schakelen we Mongo Repositories in met @EnableMongoRepositories. De structuur van ons project zou er nu als volgt uit moeten zien:

Laten we nu de repository-bewerkingen toevoegen aan de hoofdklasse, die zal worden gebruikt voor CRUD-bewerkingen:

Maak een MongoDB Spring Boot-bewerking

We zullen de opslagfunctie gebruiken om nieuwe documenten te maken. We hebben toegang tot de opslagmethode via de SimpleMongoRepository-klasse, die het MongoRepository-protocol gebruikt. Onze ItemRepository-interface breidt de ItemRepository-interface van MongoRepository uit.

De opslagmethode accepteert een parameter van het type GroceryItem. Deze sectie zal vijf boodschappen (documenten) bouwen en vervolgens de opslagfunctie gebruiken om ze op te slaan in MongoDB.

Spring Boot MongoDB leesbewerkingen

We voeren vier verschillende leesbewerkingen uit in deze applicatie:

Gebruik de functie findAll() om alle documenten (boodschappenartikelen) op te halen.

De functie findItemByName retourneert een enkel item (document) op basis van het naamveld.

Haal een lijst met objecten op, geordend op categorie.

Bereken het totale aantal objecten.

We kunnen een helperfunctie ontwerpen om het resultaat van leesbewerkingen op te maken:

MongoDB Spring Boot-updatebewerking

Stel dat we van gedachten veranderen en de voorkeur geven aan de term 'munchies' boven 'snacks' op onze boodschappenlijst. We moeten alle documenten bijwerken die de categorie 'snacks' bevatten. Om dit te bereiken, moeten we eerst alle papieren ophalen die behoren tot de categorie 'snacks', de categorie wijzigen in 'munchies' en vervolgens alle documenten opslaan.

MongoDB Spring Boot-verwijderbewerking

In plaats van een categorie of artikel te wijzigen, willen we misschien een boodschappenartikel van onze lijst verwijderen. Met behulp van de vooraf gedefinieerde deleteById-functie kunnen we het boodschappenartikel met een specifieke ID verwijderen.

We kunnen de groceryItemRepo.deleteAll(); functie om alle items te verwijderen. Als u alle documenten in de collectie verwijdert, worden ze niet verwijderd.

Het samenstellen van de CRUD-bewerkingen

Daarna zullen we de CommandLineRunner implementeren. Gebruik de methode run() om de voorgaande methoden aan te roepen:

De instructies system.out worden gebruikt om het uiterlijk van de uitvoer te verbeteren.

Wanneer de software wordt uitgevoerd, wordt de volgende uitvoer verwacht:

MongoDB Spring Boot's update-functie in combinatie met MongoTemplate

Bovendien kunnen we de MongoTemplate-klasse gebruiken om update-acties uit te voeren op een specifiek veld. Het bevat de standaardfunctionaliteit van het pakket org.springframework.data.mongodb.core.query. We hoeven niet veel code te schrijven en de update kan worden bereikt met een enkele databasequery. MongoTemplate kan ook worden gebruikt voor meer gecompliceerde processen zoals aggregaties (niet in het bereik van deze handleiding).

Er moet een aangepaste repository worden gemaakt voordat een klasse met de naam MongoTemplate wordt gebruikt. Dit is waar de query voor de update zal worden gebouwd.

Sta me toe om te demonstreren hoe je een methode construeert die de hoeveelheid van een supermarktartikel bijwerkt.

Maak een interface CustomItemRepository:

We kunnen de interface uitbreiden met zoveel methoden als nodig is en voorbeelden geven in de klasse CustomItemRepositoryImpl:

Spring importeert de objectafhankelijkheden omdat MongoTemplate @Autowired is. Bovendien stelt de @Component-annotatie Spring in staat om de CustomItemRepository-interface te ontdekken.

De volgende stap is om deze functie aan te roepen vanuit onze hoofdklasse. Net als bij de supermarktItemRepo, moeten we onze customRepo als volgt definiëren:

Maak vervolgens in de hoofdklasse de volgende methode die onze customRepo-functie aanroept:

Voeg de volgende methode toe aan de run-methode zodat deze wordt aangeroepen wanneer het programma wordt uitgevoerd:

U zou het volgende resultaat moeten krijgen:

Zoals eerder vermeld, waren we in staat om de wijziging in een enkele databasetransactie uit te voeren in plaats van MongoRepository, waarvoor drie acties nodig waren:zoeken, instellen en opslaan. MongoTemplate bevat ook de updateMulti()-methode, waarmee u meerdere documenten tegelijk kunt bijwerken.

Conclusie

We hebben in dit artikel laten zien hoe eenvoudig het is om MongoDB te integreren met Spring Boot. Er is geen andere code vereist om verbinding te maken met MongoDB Atlas. MongoDB Atlas biedt een gebruiksvriendelijke interface voor het opslaan en openen van gegevens vanaf elke locatie. Als u deze eenvoudige zelfstudie hebt voltooid, denken we dat u nu begrijpt hoe u Spring Boot met MongoDB kunt gebruiken. Als je problemen ondervindt, neem dan contact op via het opmerkingengedeelte voor hulp. Bedankt voor het lezen.


  1. Sockets delen via afzonderlijke nodeJS-instanties

  2. Creëer een uniek autoincrement-veld met mangoest

  3. Hoe N-nummers van documenten in Mongodb te verwijderen

  4. Mongodb:$in-operator versus veel enkele zoekopdrachten