Ниже приведена конфигурация mongo, код, используемый для вставки, получения и удаления документы, а также классы, с которыми я пытаюсь сопоставить.
people.json:
Код: Выделить всё
[
{
"_id": "d54d1113-2e00-46ef-8128-c6bc42220a6f",
"name": "Jo",
"_class": "person"
},
{
"_id": "3187d2a6-08da-4055-9080-2bfb7481a4a2",
"name": "Josh",
"jobTitle": "Manager",
"_class": "employee"
},
{
"_id": "80c25ae9-a402-469c-9873-5c093e093733",
"name": "John",
"major": "Art",
"_class": "student"
},
]
MongoConfig.java:
Код: Выделить всё
package com.example.demo;
import com.mongodb.ConnectionString;
import com.mongodb.MongoClientSettings;
import com.mongodb.client.MongoClient;
import com.mongodb.client.MongoClients;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.mongodb.config.AbstractMongoClientConfiguration;
@Configuration
public class MongoConfig extends AbstractMongoClientConfiguration {
@Override
protected String getDatabaseName() {
return "test";
}
@Override
public MongoClient mongoClient() {
ConnectionString connectionString = new ConnectionString("mongodb://localhost:27017/example");
MongoClientSettings mongoClientSettings = MongoClientSettings.builder()
.applyConnectionString(connectionString)
.build();
return MongoClients.create(mongoClientSettings);
}
}
Код: Выделить всё
package com.example.demo;
import jakarta.annotation.PostConstruct;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.stereotype.Component;
import java.util.ArrayList;
import java.util.List;
@Component
public class Test {
@Autowired
MongoConfig config;
MongoTemplate template;
String collection = "people";
private void insertData() {
List
peopleList = new ArrayList();
peopleList.add(new Person("Jo"));
peopleList.add(new Employee("Josh", "Manager"));
peopleList.add(new Student("John","Art"));
MongoTemplate template = new MongoTemplate(config.mongoClient(), "test");
if (template.count(new Query(), collection) == 0) {
template.insert(peopleList, collection);
}
}
@PostConstruct
public void doStuff() {
template = new MongoTemplate(config.mongoClient(), "test");
insertData();
List people = template.find(new Query(), Person.class,collection);
template.find(new Query(), Person.class,collection);
for (Person person : people) {
System.out.println(person);
}
template.remove(new Query(),Person.class,collection);
}
}
Код: Выделить всё
package com.example.demo;
import org.springframework.data.annotation.TypeAlias;
import org.springframework.data.mongodb.core.mapping.Document;
import java.util.UUID;
@TypeAlias("person")
@Document(collection = "person")
public class Person {
String id;
String name;
public Person() {
}
public Person(String name) {
this.id = UUID.randomUUID().toString();
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
@Override
public String toString() {
return "Person{" +
"id='" + id + '\'' +
", name='" + name + '\'' +
'}';
}
}
Код: Выделить всё
package com.example.demo;
import org.springframework.data.annotation.TypeAlias;
import org.springframework.data.mongodb.core.mapping.Document;
@TypeAlias("employee")
@Document(collection = "person")
public class Employee extends Person{
String jobTitle;
public Employee(){
}
public Employee(String jobTitle) {
this.jobTitle = jobTitle;
}
public Employee(String name, String jobTitle) {
super(name);
this.jobTitle = jobTitle;
}
public String getJobTitle() {
return jobTitle;
}
public void setJobTitle(String jobTitle) {
this.jobTitle = jobTitle;
}
@Override
public String toString() {
return "Employee{" +
"jobTitle='" + jobTitle + '\'' +
", id='" + id + '\'' +
", name='" + name + '\'' +
'}';
}
}
Код: Выделить всё
package com.example.demo;
import org.springframework.data.annotation.TypeAlias;
import org.springframework.data.mongodb.core.mapping.Document;
@TypeAlias("student")
@Document(collection = "person")
public class Student extends Person {
String major;
public Student(String name, String major) {
super(name);
this.major = major;
}
public String getMajor() {
return major;
}
public void setMajor(String major) {
this.major = major;
}
@Override
public String toString() {
return "Student{" +
"major='" + major + '\'' +
", id='" + id + '\'' +
", name='" + name + '\'' +
'}';
}
}
Заметил, что я указал неправильный класс для Test.java. Исправлено, чтобы люди могли видеть тест.
Подробнее здесь: https://stackoverflow.com/questions/787 ... ed-classes
Мобильная версия