SpringBoot интегрирует MongoDB для добавления, удаления, изменения и запроса данных!
SpringBoot интегрирует MongoDB для добавления, удаления, изменения и запроса данных!

1. Введение

В предыдущей статье мы подробно рассказали о настройке и использовании MongoDB. Если вы мало что знаете о MongoDB, это не имеет значения. Давайте рассмотрим это вместе.

существовать MongoDB 中有三个比较重要的名词:База данных, коллекция, документ

  • База данных:и реляционныйбаза данные одинаковые, каждая база данные имеют свои собственные права пользователя, и разные группы проектов могут использовать разные базы данных. данных
  • Коллекция: Коллекции относятся к группам документов (аналогично Mysql Понятие таблицы), в которой можно хранить множество документов.
  • Документ: Документация MongoDB Самый простой блок данных в , состоит из пар ключ-значение, аналогично JSON Формат,Может хранить разные поля,Значения полей могут включать в себя другие документы, массивы и массивы документов.

Как только вы поймете эти три термина, вы сможете приступить к работе. Сегодня мы возьмем интеграцию MongoDB в SpringBoot в качестве примера для реализации добавления, удаления, изменения и запроса данных.

Нечего сказать, давайте просто начнем мастурбировать!

2. Кодексная практика

2.1 Создайте проект SpringBoot и добавьте пакет зависимостей MongoDB.
Язык кода:javascript
копировать
<!-- Представляем Springboot -->
<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.1.0.RELEASE</version>
</parent>

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>
2.2. Добавьте файл конфигурации.

существоватьapplication.propertiesДобавить в файлmongodbСоответствующая конфигурация!

Язык кода:javascript
копировать
#Конфигурациябаза данных Адрес подключения
spring.data.mongodb.uri=mongodb://userName:password@127.0.0.1:27017/dbName

Соответствующее описание параметра:

  • userName: указывает имя пользователя, просто введите его в соответствии с реальной ситуацией.
  • Пароль: указывает пароль пользователя, введите его в соответствии с реальной ситуацией.
  • dbName:выражатьбаза данных,Можно настроить,При инициализации данных,будет создан автоматически
2.3. Создайте класс сущности.

Создать класс сущностиPerson,Аннотации@Document(collection="persons")выражать当前实体类对应的集合名称是persons,Аналогично базе реляционного типа Имя таблицы в данных.

аннотация@Idвыражать当前字段,существовать Структура коллекции принадлежитпервичный ключтип。

Язык кода:javascript
копировать
/**
 * Используйте аннотацию @Document, чтобы указать имя коллекции.
 */
@Document(collection="persons")
public class Person implements Serializable {
    private static final long serialVersionUID = -3258839839160856613L;

    /**
     * Используйте аннотацию @Id, чтобы указать базу данных в MongoDB. _id первичный ключ
     */
    @Id
    private Long id;

    private String userName;

    private String passWord;

    private Integer age;

    private Date createTime;

    //...get/set

    @Override
    public String toString() {
        return "Person{" +
                "id=" + id +
                ", userName='" + userName + '\'' +
                ", passWord='" + passWord + '\'' +
                ", age=" + age +
                ", createTime=" + createTime +
                '}';
    }
}
2.4. Работа с Монго БД.

Springboot может использовать MongoDB двумя способами.

  • Первый метод — использовать метод JPA, официально рекомендованный Springboot. Этот метод работы прост в использовании, но обладает плохой гибкостью.
  • Второй метод — использовать Spring Data MongoDB для работы с MongoDB на основе класса операций MongoTemplate, инкапсулированного официальным Java API MongoDB. Этот метод очень гибок и может удовлетворить большинство потребностей.

В этой статье мы будем использовать второй метод, чтобы представить его!

2.5. Вставить документ

MongoTemplateпредоставилinsert()метод,для вставки документов, пример кода следующий:

  • для вставки документов

Если имя коллекции не указано,возьму@Documentаннотация中的集合名称

Язык кода:javascript
копировать
@RunWith(SpringRunner.class)
@SpringBootTest
public class PersonServiceTest {

    @Autowired
    private MongoTemplate mongoTemplate;

    /**
     * Вставить документ
     * @throws Exception
     */
    @Test
    public void insert() throws Exception {
        Person person =new Person();
        person.setId(1l);
        person.setUserName("Чжан Сан");
        person.setPassWord("123456");
        person.setCreateTime(new Date());
        mongoTemplate.insert(person);
    }
}
  • Настройте имя коллекции и вставьте документ
Язык кода:javascript
копировать
@RunWith(SpringRunner.class)
@SpringBootTest
общественный класс PersonServiceTest {

    @Autowired
    частный MongoTemplate mongoTemplate;

    /**
     * Индивидуальная коллекция,Вставить документ
     * @throws Exception
     */
    @Test
    public void insertCustomCollection() throws Exception {
        Person person =new Person();
        person.setId(1l);
        person.setUserName("Чжан Сан");
        person.setPassWord("123456");
        person.setCreateTime(new Date());
        mongoTemplate.insert(person, "custom_person");
    }
}
  • Пользовательская коллекция, вставка документов пакетами

Если вы используете пакетную вставку документов, необходимо указать имя коллекции.

Язык кода:javascript
копировать
@RunWith(SpringRunner.class)
@SpringBootTest
public class PersonServiceTest {

    @Autowired
    private MongoTemplate mongoTemplate;

    /**
     * Пользовательская коллекция, вставка документов пакетами
     * @throws Exception
     */
    @Test
    public void insertBatch() throws Exception {
        List<Person> personList = new ArrayList<>();
        Person person1 =new Person();
        person1.setId(10l);
        person1.setUserName("Чжан Сан");
        person1.setPassWord("123456");
        person1.setCreateTime(new Date());
        personList.add(person1);

        Person person2 =new Person();
        person2.setId(11l);
        person2.setUserName("Ли Си");
        person2.setPassWord("123456");
        person2.setCreateTime(new Date());
        personList.add(person2);

        mongoTemplate.insert(personList, "custom_person");
    }
}
2.6. Хранение документов.

MongoTemplateпредоставилsave()метод,Используется для хранения документов.

существоватьхранилище Документ будет принятпервичный ключ ID выносить суждения,Обновить, если существование сохранено,В противном случае вставьте,Пример кода выглядит следующим образом:

  • хранилищедокумент,если не вставлен,В противном случае пройтипервичный ключIDвозобновлять
Язык кода:javascript
копировать
@RunWith(SpringRunner.class)
@SpringBootTest
public class PersonServiceTest {

    @Autowired
    private MongoTemplate mongoTemplate;

    /**
     * документ хранилища, если он не вставлен, в противном случае обновляется
     * @throws Exception
     */
    @Test
    public void save() throws Exception {
        Person person =new Person();
        person.setId(13l);
        person.setUserName("Восемьдесят восемь");        person.setPassWord("123456");
        person.setAge(40);
        person.setCreateTime(new Date());
        mongoTemplate.save(person);
    }
}
  • Пользовательская коллекция, документ хранилища
Язык кода:javascript
копировать
@RunWith(SpringRunner.class)
@SpringBootTest
public class PersonServiceTest {

    @Autowired
    private MongoTemplate mongoTemplate;

    /**
     * Пользовательская коллекция, документ хранилища
     * @throws Exception
     */
    @Test
    public void saveCustomCollection() throws Exception {
        Person person =new Person();
        person.setId(1l);
        person.setUserName("Чжан Сан");
        person.setPassWord("123456");
        person.setCreateTime(new Date());
        mongoTemplate.save(person, "custom_person");
    }
}
2.7. Обновление документации.

MongoTemplateпредоставилupdateFirst()иupdateMulti()метод,для обновления документации,Пример кода выглядит следующим образом:

  • Обновите документ, чтобы он соответствовал первой части данных в запрошенных данных документа.
Язык кода:javascript
копировать
@RunWith(SpringRunner.class)
@SpringBootTest
public class PersonServiceTest {

    @Autowired
    private MongoTemplate mongoTemplate;

    /**
     * Обновите документ, чтобы он соответствовал первой части данных в запрошенных данных документа.
     * @throws Exception
     */
    @Test
    public void updateFirst() throws Exception {
        //обновляем объект
        Person person =new Person();
        person.setId(1l);
        person.setUserName("Чжан Сан 123");
        person.setPassWord("123456");
        person.setCreateTime(new Date());

        //обновляем условия
        Query query= new Query(Criteria.where("id").is(person.getId()));

        //обновляем значение
        Update update= new Update().set("userName", person.getUserName()).set("passWord", person.getPassWord());
        //Обновляем данные документа запроса, соответствующие условиям (первый элемент)
        UpdateResult result =mongoTemplate.updateFirst(query,update, Person.class);
        if(result!=null){
            System.out.println("Количество обновлений:" + result.getMatchedCount());
        }
    }
}
  • Обновите документ, чтобы он соответствовал всем данным в запрошенном документе.
Язык кода:javascript
копировать
@RunWith(SpringRunner.class)
@SpringBootTest
public class PersonServiceTest {

    @Autowired
    private MongoTemplate mongoTemplate;

    /**
     * Обновите документ, чтобы он соответствовал всем данным в запрошенном документе.
     * @throws Exception
     */
    @Test
    public void updateMany() throws Exception {
        //обновляем объект
        Person person =new Person();
        person.setId(1l);
        person.setUserName("Чжан Сан");
        person.setPassWord("123456");
        person.setCreateTime(new Date());

        //обновляем условия
        Query query= new Query(Criteria.where("id").is(person.getId()));

        //обновляем значение
        Update update= new Update().set("userName", person.getUserName()).set("passWord", person.getPassWord());
        //Обновляем данные документа запроса, соответствующие условиям (все)
        UpdateResult result = mongoTemplate.updateMulti(query, update, Person.class);
        if(result!=null){
            System.out.println("Количество обновлений:" + result.getMatchedCount());
        }
    }
}
2.8. Удаление документов

MongoTemplateпредоставилremove()findAndRemove()иfindAllAndRemove()метод,для удаления документов, пример кода следующий:

  • Удалить все документы, соответствующие критериям
Язык кода:javascript
копировать
@RunWith(SpringRunner.class)
@SpringBootTest
public class PersonServiceTest {

    @Autowired
    private MongoTemplate mongoTemplate;

    /**
     * Удалить все документы, соответствующие критериям
     * @throws Exception
     */
    @Test
    public void remove() throws Exception {
        Person person =new Person();
        person.setId(1l);
        person.setUserName("Чжан Сан");
        person.setPassWord("123456");
        person.setCreateTime(new Date());

        Query query = new Query(Criteria.where("userName").is(person.getUserName()));
        DeleteResult result = mongoTemplate.remove(query, Person.class);
        System.out.println("Количество удаленных элементов:" + result.getDeletedCount());
    }
}
  • Удалите один документ, соответствующий критериям, и верните удаленный документ.
Язык кода:javascript
копировать
@RunWith(SpringRunner.class)
@SpringBootTest
public class PersonServiceTest {

    @Autowired
    private MongoTemplate mongoTemplate;

    /**
     * Удалите один документ, соответствующий критериям, и верните удаленный документ.
     * @throws Exception
     */
    @Test
    public void findAndRemove() throws Exception {
        Person person =new Person();
        person.setId(1l);
        person.setUserName("Чжан Сан");
        person.setPassWord("123456");
        person.setCreateTime(new Date());

        Query query = new Query(Criteria.where("id").is(person.getId()));
        Person result = mongoTemplate.findAndRemove(query, Person.class);
        System.out.println("Удалены данные документа:" + result.toString());
    }
}
  • Удалить все документы, соответствующие параметры и вернуть удаленные документы
Язык кода:javascript
копировать
@RunWith(SpringRunner.class)
@SpringBootTest
public class PersonServiceTest {

    @Autowired
    private MongoTemplate mongoTemplate;

    /**
     * Удалить все документы, соответствующие параметры и вернуть удаленные документы
     * @throws Exception
     */
    @Test
    public void findAllAndRemove() throws Exception {
        Person person =new Person();
        person.setId(1l);
        person.setUserName("Чжан Сан");
        person.setPassWord("123456");
        person.setCreateTime(new Date());

        Query query = new Query(Criteria.where("id").is(person.getId()));
        List<Person> result = mongoTemplate.findAllAndRemove(query, Person.class);
        System.out.println("Удалены данные документа:" + result.toString());
    }
}
2.9. Запрос документов

MongoTemplateпредоставил非常多的Запрос документаметод,Наиболее часто используемым в повседневной разработке являетсяfind()метод,Пример кода выглядит следующим образом:

  • Запросить все данные документа в коллекции
Язык кода:javascript
копировать
@RunWith(SpringRunner.class)
@SpringBootTest
public class PersonServiceTest {

    @Autowired
    private MongoTemplate mongoTemplate;

    /**
     * Запросить все данные документа в коллекции
     * @throws Exception
     */
    @Test
    public void findAll() throws Exception {
        List<Person> result = mongoTemplate.findAll(Person.class);
        System.out.println("Результаты запроса:" + result.toString());
    }
}
  • Запросить указанные данные документа, удостоверяющего личность, в коллекции.
Язык кода:javascript
копировать
@RunWith(SpringRunner.class)
@SpringBootTest
public class PersonServiceTest {

    @Autowired
    private MongoTemplate mongoTemplate;

    /**
     * Запросить указанные данные документа, удостоверяющего личность, в коллекции.
     * @throws Exception
     */
    @Test
    public void findById() {
        long id = 1l;
        Person result = mongoTemplate.findById(id, Person.class);
        System.out.println("Результаты запроса:" + result.toString());
    }
}
  • Запрашивать документы, соответствующие условиям в коллекции, на основе условий и возвращать первый фрагмент данных.
Язык кода:javascript
копировать
@RunWith(SpringRunner.class)
@SpringBootTest
public class PersonServiceTest {

    @Autowired
    private MongoTemplate mongoTemplate;

    /**
     * Запрашивать документы, соответствующие условиям в коллекции, на основе условий и возвращать первый фрагмент данных.
     */
    @Test
    public void findOne() {
        String userName = «Чжан Сан»;
        Query query = new Query(Criteria.where("userName").is(userName));
        Person result = mongoTemplate.findOne(query, Person.class);
        System.out.println("Результаты запроса:" + result.toString());
    }
}
  • Запрос документов, соответствующих условиям в коллекции, на основе условий
Язык кода:javascript
копировать
@RunWith(SpringRunner.class)
@SpringBootTest
public class PersonServiceTest {

    @Autowired
    private MongoTemplate mongoTemplate;

    /**
     * Запрос документов, соответствующих условиям в коллекции, на основе условий
     */
    @Test
    public void findByCondition() {
        String userName = «Чжан Сан»;
        Query query = new Query(Criteria.where("userName").is(userName));
        List<Person> result = mongoTemplate.find(query, Person.class);
        System.out.println("Результаты запроса:" + result.toString());
    }
}
  • Свяжите несколько условий запроса в соответствии с [И] для запроса данных документа в коллекции.
Язык кода:javascript
копировать
@RunWith(SpringRunner.class)
@SpringBootTest
public class PersonServiceTest {

    @Autowired
    private MongoTemplate mongoTemplate;

    /**
     * Свяжите несколько условий запроса в соответствии с [И] для запроса данных документа в коллекции.
     */
    @Test
    public void findByAndCondition() {
        // Создать условия
        Criteria criteriaUserName = Criteria.where("userName").is("Чжан Сан");
        Criteria criteriaPassWord = Criteria.where("passWord").is("123456");
        // Создать условияобъект,Примените вышеуказанные условия AND ассоциация
        Criteria criteria = new Criteria().andOperator(criteriaUserName, criteriaPassWord);
        // Создайте объект запроса и добавьте к нему объект критериев.
        Query query = new Query(criteria);
        List<Person> result = mongoTemplate.find(query, Person.class);
        System.out.println("Результаты запроса:" + result.toString());
    }
}
  • Свяжите несколько условий запроса в соответствии с [ИЛИ] для запроса данных документа в коллекции.
Язык кода:javascript
копировать
@RunWith(SpringRunner.class)
@SpringBootTest
public class PersonServiceTest {

    @Autowired
    private MongoTemplate mongoTemplate;

    /**
     * Свяжите несколько условий запроса в соответствии с [ИЛИ] для запроса данных документа в коллекции.
     */
    @Test
    public void findByOrCondition() {
        // Создать условия
        Criteria criteriaUserName = Criteria.where("userName").is("Чжан Сан");
        Criteria criteriaPassWord = Criteria.where("passWord").is("123456");
        // Создать условияобъект,Примените вышеуказанные условия OR ассоциация
        Criteria criteria = new Criteria().orOperator(criteriaUserName, criteriaPassWord);
        // Создайте объект запроса и добавьте к нему объект критериев.
        Query query = new Query(criteria);
        List<Person> result = mongoTemplate.find(query, Person.class);
        System.out.println("Результаты запроса:" + result.toString());
    }
}
  • Свяжите несколько условий запроса в соответствии с [IN] для запроса данных документа в коллекции.
Язык кода:javascript
копировать
@RunWith(SpringRunner.class)
@SpringBootTest
public class PersonServiceTest {

    @Autowired
    private MongoTemplate mongoTemplate;

    /**
     * Свяжите несколько условий запроса в соответствии с [IN] для запроса данных документа в коллекции.
     */
    @Test
    public void findByInCondition() {
        // Установить параметры условия запроса
        List<Long> ids = Arrays.asList(1l, 10l, 11l);
        // Создать условия
        Criteria criteria = Criteria.where("id").in(ids);
        // Создайте объект запроса и добавьте к нему объект критериев.
        Query query = new Query(criteria);
        List<Person> result = mongoTemplate.find(query, Person.class);
        System.out.println("Результаты запроса:" + result.toString());
    }
}
  • Запрос данных документа в коллекции на основе [логических операторов]
Язык кода:javascript
копировать
@RunWith(SpringRunner.class)
@SpringBootTest
public class PersonServiceTest {

    @Autowired
    private MongoTemplate mongoTemplate;

    /**
     * Запрос данных документа в коллекции на основе [логических операторов]
     */
    @Test
    public void findByOperator() {
        // Установить параметры условия запроса
        int min = 20;
        int max = 35;
        Criteria criteria = Criteria.where("age").gt(min).lte(max);
        // Создайте объект запроса и добавьте к нему объект критериев.
        Query query = new Query(criteria);
        List<Person> result = mongoTemplate.find(query, Person.class);
        System.out.println("Результаты запроса:" + result.toString());
    }
}
  • Запрос данных документа в коллекции на основе [регулярного выражения]
Язык кода:javascript
копировать
@RunWith(SpringRunner.class)
@SpringBootTest
public class PersonServiceTest {

    @Autowired
    private MongoTemplate mongoTemplate;

    /**
     * Запрос данных документа в коллекции на основе [регулярного выражения]
     */
    @Test
    public void findByRegex() {
        // Установить параметры условия запроса
        String regex = "^открыть*";        Criteria criteria = Criteria.where("userName").regex(regex);
        // Создайте объект запроса и добавьте к нему объект критериев.
        Query query = new Query(criteria);
        List<Person> result = mongoTemplate.find(query, Person.class);
        System.out.println("Результаты запроса:" + result.toString());
    }
}
  • Запрос документов, соответствующих условиям в коллекции, на основе условий, получить список своих документов и отсортировать их
Язык кода:javascript
копировать
@RunWith(SpringRunner.class)
@SpringBootTest
public class PersonServiceTest {

    @Autowired
    private MongoTemplate mongoTemplate;

    /**
     * Запрос документов, соответствующих условиям в коллекции, на основе условий, получить список своих документов и отсортировать их
     */
    @Test
    public void findByConditionAndSort() {
        String userName = «Чжан Сан»;
        Query query = new Query(Criteria.where("userName").is(userName)).with(Sort.by("age"));
        List<Person> result = mongoTemplate.find(query, Person.class);
        System.out.println("Результаты запроса:" + result.toString());
    }
}
  • Запрос данных документа в коллекции на основе одного условия, сортировка по указанному полю и ограничение указанного количества.
Язык кода:javascript
копировать
@RunWith(SpringRunner.class)
@SpringBootTest
public class PersonServiceTest {

    @Autowired
    private MongoTemplate mongoTemplate;

   /**
     * Запрос данных документа в коллекции на основе одного условия, сортировка по указанному полю и ограничение указанного количества.
     */
    @Test
    public void findByConditionAndSortLimit() {
        String userName = «Чжан Сан»;
        //Начинаем с первой строки, запрашиваем 2 фрагмента данных и возвращаем результат
        Query query = new Query(Criteria.where("userName").is(userName)).with(Sort.by("createTime")).limit(2).skip(1);
        List<Person> result = mongoTemplate.find(query, Person.class);
        System.out.println("Результаты запроса:" + result.toString());
    }
}
  • Подсчитайте [количество] документов в коллекции, соответствующих [условиям запроса]
Язык кода:javascript
копировать
@RunWith(SpringRunner.class)
@SpringBootTest
public class PersonServiceTest {

    @Autowired
    private MongoTemplate mongoTemplate;

   /**
     * Подсчитайте [количество] документов в коллекции, соответствующих [условиям запроса]
     */
    @Test
    public void countNumber() {
        // Установить параметры условия запроса
        String regex = "^открыть*";        Criteria criteria = Criteria.where("userName").regex(regex);
        // Создайте объект запроса и добавьте к нему объект критериев.
        Query query = new Query(criteria);
        long count = mongoTemplate.count(query, Person.class);
        System.out.println("Статистические результаты:" + count);
    }
}
3.0. Управление индексами.

индекссуществоватьвсебаза В данных очень важно временное расположение. Например, когда вы извлекаете таблицу данных с миллионами данных, без индекса эффективность запроса будет чрезвычайно низкой. MongoDB Ибо то же самое верно.

Примеры следующие:

  • Создать возрастающий индекс
Язык кода:javascript
копировать
@RunWith(SpringRunner.class)
@SpringBootTest
public class PersonServiceTest {

    @Autowired
    private MongoTemplate mongoTemplate;

    /**
     * Создать возрастающий индекс
     */
    @Test
    public void createAscendingIndex() {
        // Установить имя поля
        String field = "userName";
        // Создать индекс
        mongoTemplate.getCollection("persons").createIndex(Indexes.ascending(field));
    }
}
  • Удалить индекс
Язык кода:javascript
копировать
@RunWith(SpringRunner.class)
@SpringBootTest
public class PersonServiceTest {

    @Autowired
    private MongoTemplate mongoTemplate;

   /**
     * По индексному названию Удалить индекс
     */
    @Test
    public void removeIndex() {
        // Установить имя поля
        String field = "userName";
        // Удалить индекс
        mongoTemplate.getCollection("persons").dropIndex(field);
    }
}
  • Запросить все индексы в коллекции
Язык кода:javascript
копировать
@RunWith(SpringRunner.class)
@SpringBootTest
public class PersonServiceTest {

    @Autowired
    private MongoTemplate mongoTemplate;

   /**
     * Запросить все индексы в коллекции
     */
    @Test
    public void getIndexAll() {
        // Получить все списки в коллекции
        ListIndexesIterable<Document> indexList = mongoTemplate.getCollection("persons").listIndexes();
        // Получить всю индексную информацию в коллекции
        for (Document document : indexList) {
            System.out.println("Список индексов:" + document);
        }
    }
}
  • Мы также можем пройтисуществовать实体类上加аннотация方式来Создать индекс
Язык кода:javascript
копировать
/**
 * Используйте аннотацию @Document, чтобы указать имя коллекции.
 */
@Document(collection="persons")
public class Person implements Serializable {
    private static final long serialVersionUID = -3258839839160856613L;

    /**
     * Используйте аннотацию @Id, чтобы указать базу данных в MongoDB. _id первичный ключ
     */
    @Id
    private Long id;

    private String userName;

    private String passWord;

    private Integer age;

    /**
     * Создайте индекс, в котором документы автоматически удаляются через 5 секунд.
     */
    @Indexed(expireAfterSeconds=5)
    private Date createTime;

    //...get/set

    @Override
    public String toString() {
        return "Person{" +
                "id=" + id +
                ", userName='" + userName + '\'' +
                ", passWord='" + passWord + '\'' +
                ", age=" + age +
                ", createTime=" + createTime +
                '}';
    }
}
3.1. Введение транзакций в MongoDB.

Одноузловая mongodb не поддерживает транзакции, и необходимо создать набор реплик MongoDB.

Язык кода:javascript
копировать
/**
 * Настроить менеджер транзакций
 *
 */
@Configuration
public class TransactionConfig {

    @Bean
    MongoTransactionManager transactionManager(MongoDatabaseFactory dbFactory) {
        return new MongoTransactionManager(dbFactory);
    }

}

Тест сервиса транзакций!

Язык кода:javascript
копировать
@Service
public class TransactionExample {

    @Autowired
    private MongoTemplate mongoTemplate;

    @Transactional(rollbackFor = Exception.class)
    public Object transactionTest(){
        Person person =new Person();
        person.setId(1l);
        person.setUserName("Чжан Сан");
        person.setPassWord("123456");
        person.setCreateTime(new Date());
        Person newPerson = mongoTemplate.insert(person);
        // Тест выдает исключение и проверяет, выполнен ли откат данных.
        if(1 == 1){
            throw new RuntimeException("Исключение");
        }
        return newPerson;
    }
}

3. Резюме

Эта статья в основном посвящена основам интеграции SpringBoot с MongoDB для реализации операций добавления, удаления, изменения и запроса данных. Если есть неверное описание, оставьте сообщение и укажите на него.

существуют в реальных бизнес-сценариях,Вам также может потребоваться использовать расширенные запросы, такие как агрегатные функции.,Если у каждого есть эта потребность,Вы можете посетить следующий адрес, чтобы получить более подробную информацию об API: MongoDB Запрос документа API президента

4. Справочник

1. Учебник для новичков — mongodb

2. Очень маленькие ростки фасоли - MongoDB представлять

boy illustration
Неразрушающее увеличение изображений одним щелчком мыши, чтобы сделать их более четкими артефактами искусственного интеллекта, включая руководства по установке и использованию.
boy illustration
Копикодер: этот инструмент отлично работает с Cursor, Bolt и V0! Предоставьте более качественные подсказки для разработки интерфейса (создание навигационного веб-сайта с использованием искусственного интеллекта).
boy illustration
Новый бесплатный RooCline превосходит Cline v3.1? ! Быстрее, умнее и лучше вилка Cline! (Независимое программирование AI, порог 0)
boy illustration
Разработав более 10 проектов с помощью Cursor, я собрал 10 примеров и 60 подсказок.
boy illustration
Я потратил 72 часа на изучение курсорных агентов, и вот неоспоримые факты, которыми я должен поделиться!
boy illustration
Идеальная интеграция Cursor и DeepSeek API
boy illustration
DeepSeek V3 снижает затраты на обучение больших моделей
boy illustration
Артефакт, увеличивающий количество очков: на основе улучшения характеристик препятствия малым целям Yolov8 (SEAM, MultiSEAM).
boy illustration
DeepSeek V3 раскручивался уже три дня. Сегодня я попробовал самопровозглашенную модель «ChatGPT».
boy illustration
Open Devin — инженер-программист искусственного интеллекта с открытым исходным кодом, который меньше программирует и больше создает.
boy illustration
Эксклюзивное оригинальное улучшение YOLOv8: собственная разработка SPPF | SPPF сочетается с воспринимаемой большой сверткой ядра UniRepLK, а свертка с большим ядром + без расширения улучшает восприимчивое поле
boy illustration
Популярное и подробное объяснение DeepSeek-V3: от его появления до преимуществ и сравнения с GPT-4o.
boy illustration
9 основных словесных инструкций по доработке академических работ с помощью ChatGPT, эффективных и практичных, которые стоит собрать
boy illustration
Вызовите deepseek в vscode для реализации программирования с помощью искусственного интеллекта.
boy illustration
Познакомьтесь с принципами сверточных нейронных сетей (CNN) в одной статье (суперподробно)
boy illustration
50,3 тыс. звезд! Immich: автономное решение для резервного копирования фотографий и видео, которое экономит деньги и избавляет от беспокойства.
boy illustration
Cloud Native|Практика: установка Dashbaord для K8s, графика неплохая
boy illustration
Краткий обзор статьи — использование синтетических данных при обучении больших моделей и оптимизации производительности
boy illustration
MiniPerplx: новая поисковая система искусственного интеллекта с открытым исходным кодом, спонсируемая xAI и Vercel.
boy illustration
Конструкция сервиса Synology Drive сочетает проникновение в интрасеть и синхронизацию папок заметок Obsidian в облаке.
boy illustration
Центр конфигурации————Накос
boy illustration
Начинаем с нуля при разработке в облаке Copilot: начать разработку с минимальным использованием кода стало проще
boy illustration
[Серия Docker] Docker создает мультиплатформенные образы: практика архитектуры Arm64
boy illustration
Обновление новых возможностей coze | Я использовал coze для создания апплета помощника по исправлению домашних заданий по математике
boy illustration
Советы по развертыванию Nginx: практическое создание статических веб-сайтов на облачных серверах
boy illustration
Feiniu fnos использует Docker для развертывания личного блокнота Notepad
boy illustration
Сверточная нейронная сеть VGG реализует классификацию изображений Cifar10 — практический опыт Pytorch
boy illustration
Начало работы с EdgeonePages — новым недорогим решением для хостинга веб-сайтов
boy illustration
[Зона легкого облачного игрового сервера] Управление игровыми архивами
boy illustration
Развертывание SpringCloud-проекта на базе Docker и Docker-Compose