Die Anleitung zu Spring Boot und MongoDB
In dieser Unterricht werde ich Sie bei der Erstellung einer Applikation Spring Boot , die in die Database MongoDB verbindet an und Spring data MongoDB lernen.
1. Das Projekt Spring Boot erstellen
Auf Eclipse erstellen Sie ein Projekt Spring Boot.
pom.xml
<?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>org.o7planning</groupId>
<artifactId>SpringBootMongoDB</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>SpringBootMongoDB</name>
<description>Spring Boot +MongoDB</description>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.0.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
2. MongoDB konfigurieren
Damit Spring Boot in die Database MongoDB verbinden kann, sollen Sie die Properities in die File applications.properties konfigurieren.
application.properties
#mongodb
spring.data.mongodb.host=192.168.254.129
spring.data.mongodb.port=27017
spring.data.mongodb.database=mydatabase
#logging
logging.level.org.springframework.data=debug
logging.level.=error
In dieser Applikation verbinde ich in "mydatabase" von MongoDB. Sie haben keine Sorge wenn "mydatabase" exitiert nicht. Denn es wird automatisch erstellt
3. Spring Data MongoDB
Spring Data MongoDB ist eine Bibliothek von Spring, damit Sie mit MongoDB leicht arbeiten. Zum Beispiel Sie haben eine Collection T und Sie möchten eine Klasse mit 4 Funktionen vom Abfragen, Einfügen, Ändern und Löschung in diese Collection haben? Es ist sehr einfach!
Nach dem Grundsatz vom Spring Data MongoDB sollen Sie nur eine ausgeweiterte Interface Interface MongoRepository<T,ID> definieren und die Methode deklarieren um mit Daten von Collection zu manipulieren. Spring Data MongoDB wird eine Klasse zur Implementation dieser Interface bilden. Natürlich folgt der Name der Methode einem Regel, den Spring Data MongoDB macht.
Nach dem Grundsatz vom Spring Data MongoDB sollen Sie nur eine ausgeweiterte Interface Interface MongoRepository<T,ID> definieren und die Methode deklarieren um mit Daten von Collection zu manipulieren. Spring Data MongoDB wird eine Klasse zur Implementation dieser Interface bilden. Natürlich folgt der Name der Methode einem Regel, den Spring Data MongoDB macht.
Beispielweise haben wir auf die Database eine Kollektion Employee, die der Klasse Employee vom Java passt. Die Felder (field) von der Kollektion passt den Felder der Klasse Employee. Und der Feld ID ist der Hauptschlüssel (primary key).
Employee.java
package org.o7planning.sbmongodb.document;
import java.util.Date;
import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.index.Indexed;
import org.springframework.data.mongodb.core.mapping.Document;
import org.springframework.data.mongodb.core.mapping.Field;
@Document(collection = "Employee")
public class Employee {
@Id
private Long id;
@Indexed(unique = true)
@Field(value = "Emp_No")
private String empNo;
@Field(value = "Full_Name")
private String fullName;
@Field(value = "Hire_Date")
private Date hireDate;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getEmpNo() {
return empNo;
}
public void setEmpNo(String empNo) {
this.empNo = empNo;
}
public String getFullName() {
return fullName;
}
public void setFullName(String fullName) {
this.fullName = fullName;
}
public Date getHireDate() {
return hireDate;
}
public void setHireDate(Date hireDate) {
this.hireDate = hireDate;
}
@Override
public String toString() {
return "id:" + this.id + ", empNo: " + empNo //
+ ", fullName: " + this.fullName + ", hireDate: " + this.hireDate;
}
}
Die Interface EmployeeRepository verlängert die Interface MongoRepository<Employee, Long>,. Sie hat die Methode um mit der Kollektion Employee zu manipulieren. Spring Data MongoDB wird automatisch eine Klasse erstellen, die bei dem Runtime von Applikation diese Interface implementiert
EmployeeRepository.java
package org.o7planning.sbmongodb.repository;
import java.util.Date;
import java.util.List;
import org.o7planning.sbmongodb.document.Employee;
import org.springframework.data.mongodb.repository.MongoRepository;
import org.springframework.data.mongodb.repository.Query;
// This is an Interface.
// No need Annotation here
public interface EmployeeRepository extends MongoRepository<Employee, Long> { // Long: Type of Employee ID.
Employee findByEmpNo(String empNo);
List<Employee> findByFullNameLike(String fullName);
List<Employee> findByHireDateGreaterThan(Date hireDate);
// Supports native JSON query string
@Query("{fullName:'?0'}")
List<Employee> findCustomByFullName(String fullName);
}
Spring Data MongoDB wird automatisch die Methode erstellen, um die abstrakten Methode der Interface zu implementieren. Unten ist es die Liste von Schlüsselwörten, die für die Data Abfragen Methode unterstützt werden:
GreaterThan | findByAgeGreaterThan(int age) | {"age" : {"$gt" : age}} |
LessThan | findByAgeLessThan(int age) | {"age" : {"$lt" : age}} |
Between | findByAgeBetween(int from, int to) | {"age" : {"$gt" : from, "$lt" : to}} |
IsNotNull, NotNull | findByFirstnameNotNull() | {"age" : {"$ne" : null}} |
IsNull, Null | findByFirstnameNull() | {"age" : null} |
Like | findByFirstnameLike(String name) | {"age" : age} ( age as regex) |
(No keyword) | findByFirstname(String name) | {"age" : name} |
Not | findByFirstnameNot(String name) | {"age" : {"$ne" : name}} |
Near | findByLocationNear(Point point) | {"location" : {"$near" : [x,y]}} |
Within | findByLocationWithin(Circle circle) | {"location" : {"$within" : {"$center" : [ [x, y], distance]}}} |
Within | findByLocationWithin(Box box) | {"location" : {"$within" : {"$box" : [ [x1, y1], x2, y2]}}} |
Außerdem können Sie die Interface mit der anpassenden Methode erstellen. In dieser Situation müssen Sie die Klasse schreiben um die solche Interface zu implementieren
EmployeeRepositoryCustom.java
package org.o7planning.sbmongodb.repository;
import java.util.Date;
public interface EmployeeRepositoryCustom {
public long getMaxEmpId();
public long updateEmployee(String empNo, String fullName, Date hireDate);
}
EmployeeRepositoryCustomImpl.java
package org.o7planning.sbmongodb.repository;
import java.util.Date;
import org.o7planning.sbmongodb.document.Employee;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Sort;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.data.mongodb.core.query.Update;
import org.springframework.stereotype.Repository;
import com.mongodb.client.result.UpdateResult;
@Repository
public class EmployeeRepositoryCustomImpl implements EmployeeRepositoryCustom {
@Autowired
MongoTemplate mongoTemplate;
public long getMaxEmpId() {
Query query = new Query();
query.with(new Sort(Sort.Direction.DESC, "id"));
query.limit(1);
Employee maxObject = mongoTemplate.findOne(query, Employee.class);
if (maxObject == null) {
return 0L;
}
return maxObject.getId();
}
@Override
public long updateEmployee(String empNo, String fullName, Date hireDate) {
Query query = new Query(Criteria.where("empNo").is(empNo));
Update update = new Update();
update.set("fullName", fullName);
update.set("hireDate", hireDate);
UpdateResult result = this.mongoTemplate.updateFirst(query, update, Employee.class);
if (result != null) {
return result.getModifiedCount();
}
return 0;
}
}
4. Controller
SpringBootMongoDbApplication.java
package org.o7planning.sbmongodb;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Bean;
import org.springframework.data.mongodb.MongoDbFactory;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.convert.DefaultDbRefResolver;
import org.springframework.data.mongodb.core.convert.DefaultMongoTypeMapper;
import org.springframework.data.mongodb.core.convert.MappingMongoConverter;
import org.springframework.data.mongodb.core.mapping.MongoMappingContext;
@SpringBootApplication
public class SpringBootMongoDbApplication {
public static void main(String[] args) {
SpringApplication.run(SpringBootMongoDbApplication.class, args);
}
@Bean
public MongoTemplate mongoTemplate(MongoDbFactory mongoDbFactory, MongoMappingContext context) {
MappingMongoConverter converter = new MappingMongoConverter(new DefaultDbRefResolver(mongoDbFactory), context);
converter.setTypeMapper(new DefaultMongoTypeMapper(null));
MongoTemplate mongoTemplate = new MongoTemplate(mongoDbFactory, converter);
return mongoTemplate;
}
}
MainController.java
package org.o7planning.sbmongodb.controller;
import java.util.Date;
import java.util.List;
import org.o7planning.sbmongodb.document.Employee;
import org.o7planning.sbmongodb.repository.EmployeeRepository;
import org.o7planning.sbmongodb.repository.EmployeeRepositoryCustom;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
@Controller
public class MainController {
private static final String[] NAMES = { "Tom", "Jerry", "Donald" };
@Autowired
private EmployeeRepositoryCustom employeeRepositoryCustom;
@Autowired
private EmployeeRepository employeeRepository;
@ResponseBody
@RequestMapping("/")
public String home() {
String html = "";
html += "<ul>";
html += " <li><a href='/testInsert'>Test Insert</a></li>";
html += " <li><a href='/showAllEmployee'>Show All Employee</a></li>";
html += " <li><a href='/showFullNameLikeTom'>Show All 'Tom'</a></li>";
html += " <li><a href='/deleteAllEmployee'>Delete All Employee</a></li>";
html += "</ul>";
return html;
}
@ResponseBody
@RequestMapping("/testInsert")
public String testInsert() {
Employee employee = new Employee();
long id = this.employeeRepositoryCustom.getMaxEmpId() + 1;
int idx = (int) (id % NAMES.length);
String fullName = NAMES[idx] + " " + id;
employee.setId(id);
employee.setEmpNo("E" + id);
employee.setFullName(fullName);
employee.setHireDate(new Date());
this.employeeRepository.insert(employee);
return "Inserted: " + employee;
}
@ResponseBody
@RequestMapping("/showAllEmployee")
public String showAllEmployee() {
List<Employee> employees = this.employeeRepository.findAll();
String html = "";
for (Employee emp : employees) {
html += emp + "<br>";
}
return html;
}
@ResponseBody
@RequestMapping("/showFullNameLikeTom")
public String showFullNameLikeTom() {
List<Employee> employees = this.employeeRepository.findByFullNameLike("Tom");
String html = "";
for (Employee emp : employees) {
html += emp + "<br>";
}
return html;
}
@ResponseBody
@RequestMapping("/deleteAllEmployee")
public String deleteAllEmployee() {
this.employeeRepository.deleteAll();
return "Deleted!";
}
}
Anleitungen Spring Boot
- Installieren Sie die Spring Tool Suite für Eclipse
- Die Anleitung zum Sping für den Anfänger
- Die Anleitung zum Spring Boot für den Anfänger
- Gemeinsame Eigenschaften von Spring Boot
- Die Anleitung zu Spring Boot und Thymeleaf
- Die Anleitung zu Spring Boot und FreeMarker
- Die Anleitung zu Spring Boot und Groovy
- Die Anleitung zu Spring Boot und Mustache
- Die Anleitung zu Spring Boot und JSP
- Die Anleitung zu Spring Boot, Apache Tiles, JSP
- Verwenden Sie Logging im Spring Boot
- Anwendungsüberwachung mit Spring Boot Actuator
- Erstellen Sie eine mehrsprachige Webanwendung mit Spring Boot
- Verwenden Sie im Spring Boot mehrere ViewResolver
- Verwenden Sie Twitter Bootstrap im Spring Boot
- Die Anleitung zu Spring Boot Interceptor
- Die Anleitung zu Spring Boot, Spring JDBC und Spring Transaction
- Die Anleitung zu Spring JDBC
- Die Anleitung zu Spring Boot, JPA und Spring Transaction
- Die Anleitung zu Spring Boot und Spring Data JPA
- Die Anleitung zu Spring Boot, Hibernate und Spring Transaction
- Spring Boot, JPA und H2-Datenbank integrieren
- Die Anleitung zu Spring Boot und MongoDB
- Verwenden Sie mehrere DataSource mit Spring Boot und JPA
- Verwenden Sie mehrere DataSource mit Spring Boot und RoutingDataSource
- Erstellen Sie eine Login-Anwendung mit Spring Boot, Spring Security, Spring JDBC
- Erstellen Sie eine Login-Anwendung mit Spring Boot, Spring Security, JPA
- Erstellen Sie eine Benutzerregistrierungsanwendung mit Spring Boot, Spring Form Validation
- Beispiel für OAuth2 Social Login im Spring Boot
- Führen Sie geplante Hintergrundaufgaben in Spring aus
- CRUD Restful Web Service Beispiel mit Spring Boot
- Beispiel Spring Boot Restful Client mit RestTemplate
- CRUD-Beispiel mit Spring Boot, REST und AngularJS
- Sichere Spring Boot RESTful Service mit Basic Authentication
- Sicherer Spring Boot RESTful Service mit Auth0 JWT
- Beispiel Upload file mit Spring Boot
- Beispiel Download File mit Spring Boot
- Das Beispiel: Spring Boot File Upload mit jQuery Ajax
- Das Beispiel File Upload mit Spring Boot und AngularJS
- Erstellen Sie eine Warenkorb-Webanwendung mit Spring Boot, Hibernate
- Die Anleitung zu Spring Email
- Erstellen Sie eine einfache Chat-Anwendung mit Spring Boot und Websocket
- Stellen Sie die Spring Boot-Anwendung auf Tomcat Server bereit
- Stellen Sie die Spring Boot-Anwendung auf Oracle WebLogic Server bereit
- Installieren Sie ein kostenloses Let's Encrypt SSL-Zertifikat für Spring Boot
- Konfigurieren Sie Spring Boot so, dass HTTP zu HTTPS umgeleitet wird
Show More