Spring Data provides additional projects that help you access a variety of NoSQL technologies including MongoDB, Neo4J, Redis, Gemfire, Couchbase and Cassandra. Spring Boot provides auto-configuration for MongoDB; you can make use of the other projects, but you will need to configure them yourself. Refer to the appropriate reference documentation at http://projects.spring.io/spring-data.
MongoDB is an open-source NoSQL document database that uses a
JSON-like schema instead of traditional table-based relational data. Spring Boot offers
several conveniences for working with MongoDB, including the The
spring-boot-starter-data-mongodb
“Starter POM”.
You can inject an auto-configured com.mongodb.Mongo
instance as you would any other
Spring Bean. By default the instance will attempt to connect to a MongoDB server using
the URL mongodb://localhost/test
:
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import com.mongodb.Mongo; @Component public class MyBean { private final Mongo mongo; @Autowired public MyBean(Mongo mongo) { this.mongo = mongo; } // ... }
You can set spring.data.mongodb.uri
property to change the url
, or alternatively
specify a host
/port
. For example, you might declare the following in your
application.properties
:
spring.data.mongodb.host=mongoserver spring.data.mongodb.port=27017
Tip | |
---|---|
If |
You can also declare your own Mongo
@Bean
if you want to take complete control of
establishing the MongoDB connection.
Spring Data Mongo provides a MongoTemplate
class that is very similar in its design to Spring’s JdbcTemplate
. As with
JdbcTemplate
Spring Boot auto-configures a bean for you to simply inject:
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.mongodb.core.MongoTemplate; import org.springframework.stereotype.Component; @Component public class MyBean { private final MongoTemplate mongoTemplate; @Autowired public MyBean(MongoTemplate mongoTemplate) { this.mongoTemplate = mongoTemplate; } // ... }
See the MongoOperations
Javadoc for complete details.
Spring Data includes repository support for MongoDB. As with the JPA repositories discussed earlier, the basic principle is that queries are constructed for you automatically based on method names.
In fact, both Spring Data JPA and Spring Data MongoDB share the same common
infrastructure; so you could take the JPA example from earlier and, assuming that
City
is now a Mongo data class rather than a JPA @Entity
, it will work in the
same way.
package com.example.myapp.domain; import org.springframework.data.domain.*; import org.springframework.data.repository.*; public interface CityRepository extends Repository<City, Long> { Page<City> findAll(Pageable pageable); City findByNameAndCountryAllIgnoringCase(String name, String country); }
Tip | |
---|---|
For complete details of Spring Data MongoDB, including its rich object mapping technologies, refer to their reference documentation. |